2.5. 接口
<规则1> 头文件应采用 #ifndef / #define / #endif 的方式来防止多次被嵌入。
示例如下:
假设头文件为揇EF.INC",则其内容应为:
#ifndef __DEF_INC
#define __DEF_INC
...
#endif
<规则2> 去掉没有必要的公共变量,时应尽量少用公共变量。
公共变量是增大模块间耦合的原因之一,故应减少没必要的公共变量以降低模块间的耦合度。应该构造仅有一个模块或函数可以修改、创建,而其余有关模块或函数只访问的公共变量,防止多个不同模块或函数都可以修改、创建同一公共变量的现象。
<规则3> 当向公共变量传递数据时,要防止越界现象发生。
对公共变量赋值时,若有必要应进行合法性检查,以提高的可靠性、稳定性。
<规则4> 返回值为指针的函数,不可将局部变量的地址作为返回值。
当函数退出时,非static局部变量将消失,所以引用返回的指针将可能引起严重后果。下例将不能完成正确的功能。
char *GetFilename(int nFileNo)
{
char szFileName[20];
sprintf( szFileName, "COUNT%d", nFileNo);
return szFileName;
}
<规则5> 尽量不设计多参数函数,将不使用的参数从接口中去掉,降低接口复杂度。
减少函数间接口的复杂度。
<规则6> 对所调用函数的返回码要仔细、全面地处理。
防止把错误传递到后面的处理流程。如有意不检查其返回码,应明确指明。 如:
(void)fclose(fp);
<规则7> 显示地给出函数的返回值类型。无返回值函数定义为void。
C、C++语言的编译系统默认无显示返回值函数的返回值类型为int。
<规则8> 声明函数原型时给出参数名称和类型,并且与实现此函数时的参数名称、类型保持一致,无参数的函数,用void声明。
示例:下面声明不正确。
int CheckData( ) ;
int SetPoint( int, int ) ;
int SetPoint( x, y )
int x, y;
应改为如下声明:
int CheckData( void ) ;
int SetPoint( int x, int y ) ;
<规则9> 检查接口函数所有输入参数的有效性。
可直接检查或使用断言进行检查,尤其是指针参数。只在本模块内使用的函数可不检查。
<规则10> 检查函数的所有非参数输入,如数据文件、公共变量等。
可直接检查或使用断言进行检查,尤其是指针变量。
除特别注明外,本站所有文章均为 赢咖4注册 原创,转载请注明出处来自常见C/C++编码规范(6)