一、命名
命名的总原则:望文知意
1、尽可能使用英文名称或者简写命名,要清晰、明了,有明确含义,避免使用拼音首字母组合。
2、缩写使用要统一。系统、程序、模块的缩写应在设计阶段文档中定义其缩写及全称,并保证内部不重复。
、公共接口函数加上所属模块前缀。
1.1命名组成
程序、模块、函数、变量等所有命名包括以下全部或部分:
的作用是说明作用域或标识所属区域,例如在变量中用m表示成员变量,在函数函数名中也可以在前缀中加模块名或模块缩写以表示该函数属于哪个模块。
的作用仅用于分割。
用于标识该命名所对应对像的重要属性,比如在成员变量中用”s”表示字符串类型,在类的命名中用”C”表示类。
是对目标的具体命名,是见文知义的核心。
一般是对名称的进一步补充。
1.2组成要求
下表列出了各种类型名称命名的强制要求,“√”表示必须含有,“╳”表示不需要该部分,“-”表示根据实际情况添加
1.定义阶段要求
二、注释
注释的总原则:应有必有、准确、易懂
1、每个模块/类开头必有注释,说明模块的总体功能及其它重要说明。
2、每个代码超过50行的函数必有注释,说明函数的功能,参数及返回值的说明。
、全局变量及公共成员变量必有注释,说明变量的作用。
4、宏定义在使用宏的模块头文件中必有注释,说明其作用。
5、枚举及结构体中的各项必有注释,说明其含义。
6、修改必留注释,说明修改原因、修改内容、修改人及修改时间。
7、复杂逻辑多注释内容。
8、屏蔽代码不嵌套,可以使用#if0代替注释符。
三、指针
指针的总原则:初始化、非空判断、边界判断、释放。
1、指针定义后必须初始化。
2、指针使用前必须做非空判断或断言。
、指针偏移访问前必做边界判断。
4、对像/内存释放后指针必置空。
5、对象/内存“谁分配谁释放”。
6、指针传递不跨模块,若必需,接收方可以做副本再处理,传递必明确类型及大小。
7、在类中,尽可能将指针操作封装到成员函数中。
四、函数
函数的总原则:查参数、功能专、查返回。
1、函数入参必需加断言,确定输入合法。
2、函数所实现的功能专一。
、可重入函数使用局部变量,否则必保护。
4、中断、定时器等响应函数要越快返回越好,不要实现太复杂的逻辑,尽量不加循环,不输出、不写日志、不访问外设、并减少其对外部函数调用,必须保证瞬间能返回。
5、函数返回前必加断言判断返回值。
6、非必要不将指针作为返回值。
7、函数调用后必对函数返回值作判断是否合法。
8、函数返回值尽量用int或枚举代替bool以提供更多失败信息。
五、断言
断言的总原则:统一处理、充分判断、分级处理。
1、一个系统或一个程序统一断言处理过程。
2、对于断言判断要充分设计,精确确定范围。
、对Debug、Release、Runtime模式采用不同的断言处理方式。
六、日志
日志的总原则:统一处理、说重点、分级处理。
1、一个系统使用统一的日志模块产生日志。
2、日志语言描述必须准确,描述重点内容。
、不同运行状态下记录不同等级日志,Runtime时记录日志越少越好。