笔试面试那件小事(函数)

来源:互联网 发布:python idle 显示行号 编辑:程序博客网 时间:2024/05/16 07:38

函数接口的两个要素是参数和返回值。在C语言中,函数的参数和返回值的传递方式有两种:值传递和指针传递。在C++语言中多了引用传递。

1->函数参数

函数在设计时其参数的设计要参考下面一些规则:

a):参数的书写要完整,不要只写了参数的类型,而省略了参数的名字,如果函数没有参数就用void填充

b):参数的命名要恰当,顺序要合理

例如:  void StrinCopy(char *str,char *str2);就很难弄明白字符串是从str1拷贝到str2,还是相反过来。

但是写成:void StringCopy(char *strDestination,char *stringSource);就容易明白多了。

c):如果参数是指针,且仅作为输入作用,则应该在类型前面加上const,以防指针在函数体内被意外的修改

d):如果输入的参数以值传递的方式传递对象,则宜该用”const t &“的方式传递可以省去临时对象构造和析构过程的开销,从而提高效率

e):避免函数有太多的参数,参数的个数应当尽量控制在5个以内,尽量不要使用类型和数目不确定的参数

 

2->返回值

a):不要省略返回值的类型。如果函数没有返回值,那么应当声明为void类型

b):函数名字与返回值类型杂语义上不可冲突

c):不要把正常值好错误标志混在一起返回

d):有时候函数原本不需要返回值,但是为了增加灵活性,例如支持链式表达,可以附加返回值。

例如字符串拷贝函数strcpy的原型:char *strcpy(char *strDeset,const char *srSrc);

e):如果返回值是一个对象,有时候返回值可以用”引用传递“代替值传递

 

3->函数的内部实现

因为函数的功能不同,其内部实现一定也是不同的,也无法制定一个统一的标准。我们所要说的内部实现指的是函数体”入口处“和”出口处“的规范。

a):在函数体的”入口处“,要对参数的有效性进行检查,例如assert函数

b):在函数的”出口处“,对return语句的正确性和效率进行检查

注意几点:return语句不可以返回指向”栈内存“的指针或者引用;要弄清楚返回的究竟是”值“、”指针“还是”引用“;返回的是一个对象,要考虑返回的效率

 

4->其他关于函数的建议

a):函数的功能要单一

b):尽量避免函数带有”记忆“功能,例如static变量

c):既要检查输入参数的有效性,也要检查通过其他方式进入函数内的变量的有效性

d):用于出错处理的返回值一定要清楚。

 

5->断言的使用

断言仅在debug版本中起作用的宏,它用于检查不应该发生的情况。在运行的过程中,如果assert的参数为假,那么就会停止程序的运行

断言使用时候要注意:

使用断言捕捉不应该发生的非法情况,而不是错误的情况

在函数的入口处,使用断言来检查参数的有效性

0 0