1.检查函数输入的有效性。
2.如果参数是指针,且仅作输入用,则应在类型前加const,以防止该指针在函数体内被意外修改。
3.用malloc或new申请后应该立即检查指针是否为NULL。
4.指针的申请和释放必须配对。指针释放后应该立即设置为NULL,避免野指针。
5.宏定义要用括号。
6.指针判别是否为空直接和NULL比较,而不是用!。
7.代码错误后可用断言宣布错误,并终止。
8.以同样的顺序定义和初始化变量。
9.使用固定大小的存储空间时,对存入的元素数量进行范围检查。
10.正式软件产品中应把断言及其他调测代码去掉。
11.全局变量使用static定义,访问全局变量使用get()和set(),尽量避免使用extern。
12.较长的语句要分成多行,换行以低优先级运算符开头并缩进。
13.避免使用不易理解的数字,用有意义的标识来替代。涉及物理状态或者含有物理意义的常量,不应直接使用数字,必须用有意义的枚举或宏来代替。
15.避免循环体内含判断语句,应将循环语句置于判断语句的代码块之中。
16.严禁使用未经初始化的变量作为右值。
17. 路径使用反斜线“/”,而不是斜线“\”,“/”能被不同的平台识别。
18.所有头文件都要包含
#ifndef FOO_BAR_BAZ_H_
#define FOO_BAR_BAZ_H_
...
#endif // FOO_BAR_BAZ_H_
防止被多重包含。
- 整数用 0 , 实数用 0.0,指针用NULL,字符 (串) 用 '\0',结构体用memset。
- 文件名要全部小写, 可以包含下划线 ( _ ) 或连字符 ( - )。
- 类型名称的每个单词首字母均大写, 不包含下划线。
- 变量 (包括函数参数) 和数据成员名一律小写, 单词之间用下划线连接。
- 声明为 constexpr 或 const 的变量, 或在程序运行期间其值始终保持不变的, 命名时以 “k” 开头, 大小写混合。
- 函数全部使用大驼峰命名风格: MyExcitingFunction() , MyExcitingMethod() 。
- 枚举的命名应当和 常量 或 宏 一致: kEnumName 或是 ENUM_NAME .
- 宏命名: MY_MACRO_THAT_SCARES_SMALL_CHILDREN。
- 只使用空格, 每次缩进 2 个空格。
- 关键字 if 和 else 另起一行。
- 垂直留白越少越好. 两个函数定义之间的空行不要超过 2 行, 函数体首尾不要留空行, 函数体中也不要随意添加空行。
- 将相似的声明放在一起, 将 public 部分放在最前。
- 函数的参数顺序为: 输入参数在先, 后跟输出参数。
- 所有按引用传递的参数必须加上 const。
- 尽可能用 sizeof(varname) 代替 sizeof(type) 。
- 每个类的定义都要附带一份注释, 描述类的功能和用法, 除非它的功能相当明显.。
17.常量都用宏定义替代
18.中间变量太多,尽量减少数据的来回倒腾,容易出错
19.一行的log奇长无比,建议到达一定长度加\n
20.多写注释