参数的书写要完整,不要贪图省事只写参数的类型而省略参数名字。如果函数没有参数,则用void填充;
参数命名要恰当,顺序要合理;
如果参数是指针,且仅作输入用,则应在类型前加const,以防止该指针在函数体内被意外修改;
如果输入参数以值传递的方式传递对象,则宜改用“const&”方式来传递,这样可以省去临时对象的构造和析构过程,从而提高效率。
不要省略返回值的类型;
不要将正常值和错误标志混在一起返回。正常值用输出参数获得,而错误标志用return语句返回;
在函数体的“入口处”,对参数的有效性进行检查。
很多程序错误是由非法参数引起的,我们应该充分理解并正确使用“断言”(assert)来防止此类错误。
在函数体的“出口处”,对return语句的正确性和效率进行检查。
(1)return语句不可返回指向“栈内存”的“指针”或者“引用”,因为该内存在函数体结束时被自动销毁。
(2)要搞清楚返回的究竟是“值”、“指针”还是“引用”。
(3)如果函数返回值是一个对象,要考虑return语句的效率。
函数的功能要单一,不要设计多用途的函数。
函数体的规模要小,尽量控制在50行代码之内。
尽量避免函数带有“记忆”功能。相同的输入应当产生相同的输出。带有“记忆”功能的函数,其行为可能是不可预测的,因为它的行为可能取决于某种“记忆状态”。这样的函数既不易理解又不利于测试和维护。
在C/C++语言中,函数的static局部变量是函数的“记忆”存储器。建议尽量少用static局部变量,除非必需。
不仅要检查输入参数的有效性,还要检查通过其它途径进入函数体内的变量的有效性,例如全局变量、文件句柄等。
用于出错处理的返回值一定要清楚,让使用者不容易忽视或误解错误情况。