现在的位置: 首页 > 综合 > 正文

函数的设计

2013年09月09日 ⁄ 综合 ⁄ 共 1091字 ⁄ 字号 评论关闭

函数作为C/C++程序的基本功能单元,具有非常重要的作用,良好的函数接口设计,合适的入参,出参,返回值的设计对整个程序大有裨益,会让开发者感到流畅,清爽,水到渠成的感觉。相反,风格不统一,格式混乱,前后矛盾冲突,不仅会让团队其他人感到迷惑,也会降低整个实现的流畅性,感到捉襟见肘,拆东墙补西墙。

本文主要总结了函数的接口设计和内部实现的一些规则。

函数接口的两大要素是参数和返回值。C语言中,函数的参数和返回值的传递方式有两种:值传递(pass by value)和指针传递(pass by pointer)。C++ 语言中多了引用 传递(pass by reference)。

1.参数规则:

规则1-1】参数的书写要完整,不要贪图省事只写参数的类型而省略参数名字。 如果函数没有参数,则用void填充。

规则1-2】参数命名要恰当,顺序要合理。

规则1-3】如果参数是指针,且仅作输入用,则应在类型前加const,以防止该指针在函数体内被意外修改。

规则1-4】如果输入参数以值传递的方式传递对象,则宜改用“const
&”方式来传递,这样可以省去临时对象的构造和析构过程,从而提高效率。

建议1-1】避免函数有太多的参数,参数个数尽量控制在5个以内。如果参数太多,在使用时容易将参数类型或顺序搞错。

建议1-2】尽量不要使用类型和数目不确定的参数。

2.返回值规则:

规则2-1】不要省略返回值的类型。

规则2-2】函数名字与返回值类型在语义上不可冲突。  违反这条规则的典型代表是C标准库函数getchar。

规则2-3】不要将正常值和错误标志混在一起返回。正常值用输出参数获得,而错误标志用return语句返回。

建议2-1】有时候函数原本不需要返回值,但为了增加灵活性如支持链式表达, 可以附加返回值。

建议2-2】如果函数的返回值是一个对象,有些场合用“引用传递”替换“值传 递”可以提高效率。而有些场合只能用“值传递”而不能用“引用传递”,否则会 出错。

3.内部实现规则

规则3-1】在函数体的“入口处”,对参数的有效性进行检查。

规则3-2】在函数体的“出口处”,对return语句的正确性和效率进行检查。

4.其他建议

建议4-1】函数的功能要单一,不要设计多用途的函数。

建议4-2】函数体的规模要小,尽量控制在50行代码之内。

建议4-3】尽量避免函数带有“记忆”功能。相同的输入应当产生相同的输出。

建议4-4】不仅要检查输入参数的有效性,还要检查通过其它途径进入函数体内的变量的有效性,例如全局变量、文件句柄等。

建议4-5】用于出错处理的返回值一定要清楚,让使用者不容易忽视或误解错误情况。


抱歉!评论已关闭.