我的代码规范
头文件:
先系统头文件,后用户头文件
只引用需要的头文件。
空行:
文件头、控制块,#include
部分、宏定义部分、class
部分、全局常量部分、全局变量部分、函数和函数之间,用两个空行。
注释:
作者,文件名称,文件说明
关键函数必须写上注释,说明函数的用途。
特别函数参数,需要说明参数的目的,由谁负责释放等等。
除了特别情况,注释写在代码之前,不要放到代码行之后。
对每个#else
或#endif
给出行末注释。
关键代码注释,包括但不限于:赋值,函数调用,表达式,分支等等。
善未实现完整的代码,或者需要进一步优化的代码,应加上 // TODO …
调试的代码,加上注释 // only for DEBUG
需要引起关注的代码,加上注释 // NOTE …
对于较大的代码块结尾,如for,while,do
等,可加上 // end for|while|do
命名:
函数参数用a作为前缀。
避免出现和匈牙利混合的命名规则如apBuffer名称。用aBuffer即可。
函数参数比较多时,应考虑用结构代替。
如果不能避免函数参数比较多,应在排版上可考虑每个参数占用一行,参数名竖向对齐。
代码风格:
每一行开始处的缩进只能用Tab,不能用空格,输入内容之后统一用空格。除了最开始的缩进控制用Tab,其他部分为了对齐,需要使用空格进行缩进。这样可以避免在不同的编辑器下显示不对齐的情况。
在代码行的结尾部分不能出现多余的空格。
在"::","->","."前后加空格。
不要在",",";"之前加空格。
类,结构,枚举,联合:大括号另起一行。
函数体的{需要新起一行,在{之前不能有缩进。
除了特别情况,函数体内不能出现两个空行。
除了特别情况,函数体内不能宏定义指令。
在一个函数体内,逻揖上密切相关的语句之间不加空行,其它地方应加空行分隔。
在头文件定义的inline函数,函数之间可以不用空行,推荐用一个空行。
空循环可用 for( ;; )
或者 while( 1 )
或者 while( true )。
避免在表达式中用赋值语句。
避免对浮点类型做等于或不等于判断。
不能将枚举类型进行运算后再赋给枚举变量。
在循环过程中不要修改循环计数器。
检测空指针,用 if( p );
检测非空指针,用 if( ! p )。
函数:
引用类型作为返回值:函数必须返回一个存在的对象。
引用类型作为参数:调用者必须传递一个存在的对象。
构造函数的初始化列表,应和类的顺序一致。
初始化列表中的每个项,应独占一行。
避免出现用一个成员初始化另一个成员。
构造函数应初始化所有成员,尤其是指针。
不要在构造函数和析构函数中抛出异常。