1、用预处理语句保护头文件
#ifndef 标识符
#define 标识符
…头文件内容…
#endif
2、注释
①文件:描述、作者、创建日期、修订记录(版本、日期、修订人)
②函数:函数名及描述、参数说明、返回值说明
③语句:注释行不低于代码行20%
3、代码整洁
①代码行缩进对齐用table键,不要手敲空格。
②一行太长用“\”换行
③{}括号使用、空格间隔
4、命名规则
匈牙利命名法、驼峰命名法、蛇形命名法
5、类型名重定义
char、int用typedef重定义类型名(不同机器,字节长度可能不一致)
6、结构体对齐
①四字节
②#pragma pack
7、变量
①初始化:结构、数组用memset
②拷贝:结构、数组、指针用memcpy——安全函数
③局部变量少于10KB(具体结合资源大小)
④全局变量加static,其它源文件若需要调用,用函数封装成供外部调用的接口(set、get)
8、函数
①入参检查
②无返回值时,结束也用return显式结束
③长度<200行
④函数被调用,判断返回值(无返回值时在调用函数前加(void))
⑤函数入参若是结构体,使用指向结构的指针。
⑥形参不宜过多(不超过5个),无形参加void,
⑦形参若不允许修改,加上const(注意区分顶层、底层const)
9、常数
①常数一般用宏表示(宏定义时一般要加上括号)
②if语句,判断条件中常数or常量在左
10、使用memcpy、strcpy等对应的安全函数
11、资源释放
①动态内存分配必有释放对应,尽量少动态分配内存,减少内存碎片
②句柄释放
③加锁要释放、注意死锁(规避)
④代码中有异常终止处理语句时,注意内存释放。
12、嵌套
①while、for内嵌不要太多
13、递归
尽量不使用递归,必须使用时加深度限制。
14、goto语句尽可能不使用
15、注意代码冗余,高内聚、低耦合
16、打印
①异常加打印,注意区别u、d
②打印区分等级:error、notice、warning、debug,并根据等级设定打印开关
不定长数组
【待继续完善】