函数,过程
1、对函数的输入数据必须要仔细、全面的处理;对所调用函数的返回值要仔细、全面的处理。
对数据的使用应该遵守谁使用谁检查的原则;
函数的输入主要有两种:一种是参数输入;另一种是全局变量、数据文件的输入,即非参数输入。
如有必要,在发行版中可以去掉某些数据有效性检查。
2、每个函数的功能必须是明确而精确的。
每个函数只完成一个特定的功能。多功能集于一身的函数,很可能使函数的理解、测试、维护变得困难。
如果多段代码重复做同一件事情,那么在函数的划分上可能存在问题,若此段代码各语句之间有实质性关联并且是完成同一件功能的,那么可考虑把此段代码构造成一个新的函数。
功能不明确较小的函数,特别是仅有一个上级函数调用它时,应考虑把它合并到上级函数中,而不必单独存在。模块中函数划分的过多,一般会使函数间的接口变得复杂。
3、不得将栈对象的地址传给外部作用域对象。
4、编写可重入函数时,应注意局部变量的使用。
编写可重入函数时,不应使用static局部变量,否则必须经过特殊处理,才能使函数具有可重入性。
5、编写可重入函数时,若使用全角变量,则应通过关中断、信号量(即P、V操作)等手段对其加以保护。
若对所使用的全局变量不加以保护,则此函数就不具有可重入性,即当多个进程调用此函数时,很有可能使有关全局变量变为不可知状态。
6、参数的书写要完整,不得只写参数的类型而省略参数的名字。如果函数没有参数、则用void填充。
7、不要省略返回值的类型、如果函数没有返回值应声明为void类型。
8、函数名字与返回值类型在语义上不可冲突。
建议:防止将函数的参数作为工作变量,
函数的规模尽量限制在200行以内
函数的功能应该可以预测的,也就是只要输入数据相同就应产生同样的输出。 带有内部“存储器”的函数的功能可能是不可预测的,因为它的输出可能取决于内部存储
器状态,这样的函数既不易于理解又不利于测试和维护。在C++语言中,static局部变量是函数的内部存储器有可能使函数的功能不可预测,然而,当某函数
的 返回值为指针类型时,则必须是static的局部变量的地址作为返回值,若为AUTO类,则返回错针。
尽量不要编写依赖于其他函数内部实现的函数。
避免设计多参数函数,参数个数尽量控制在5个以内,不适用的参数从接口中去掉。尽量不要使用类型和数目不确定的参数,
非调度函数应减少或防止控制参数,尽量只使用数据参数。
函数名应准确描述函数的功能。
使用动宾词组为执行某操作的函数命名。如果是OOP方法,可以只有动词(名词是对象本身)。
避免使用无意义或含义不清的动词为函数命名。
函数的返回值要清楚、明了,让使用者不容易忽视错误情况。
除非必要,最好不要把与函数返回值类型不同的变量,以编译系统默认的转换方式或强制的转换方式作为返回值返回。
在调用函数填写参数时,应尽量减少没有必要的默认数据类型转换或强制数据类型转换。
避免函数中不必要语句,防止程序中得垃圾代码。
防止把没有关联的语句放到一个函数中。//防止函数或过程内出现随机内聚。随机内聚是指将没有关联或者关联很弱的语句放到同一个函数或过程中,随机内聚给函数或
//过 程的维护、测试 及以后的升级等造成了不便,同时也使函数或过程的功能不明确。使用随机内聚函数,常常容易出现在一种应用场合需要改进此函数,而另一种
//应用场合需要改进此函数,而另一种应用场合又不允许这种改进,从而陷入困境。
设计高扇入、合理扇出(小于7)的函数//扇出是指一个函数直接调用(控制)其它函数的数目,而扇入是指有多少上级函数调用它。扇出过大表明函数过于复杂,需要控制
//和协调过多的下级函数;而扇出过小