一、命名:
1.类型名
使用首字母大写的驼峰命名法(如StudentGrade,MyClass)
命名由单词组合而成,其中每个单词以大写字母开头,不包含下划线 。
宏、常量,enum 结构中的成员命名全部大写
2.变量
语义上应该是一个名词或名词短语
使用下划线命名法(如student_name)
全局变量(尽量少用):g_后首字母大写。中间可根据意义的连续性用下划线连接,每一条定义的右侧必须有一简单的注释,
命名要有描述性;
少用缩写;
省略掉无意义的长度,比如number_error可以用num_error替换
3.函数/方法
语义上应该是一个动词或动词短语
使用首字母大写的驼峰命名法(如studentName)
的名字采用英文大小写混合的驼峰命名法(camelCase)且首字母最好是动词,没有下划线。
举例:getName(), isEmpty(),
@note:尽量使用insert(),append()代替行为不明的add()
4. 文件名
文件名全部小写,需要的话可以用“_”串接;不要与标准库等下边的头文件重名
1> 尽量少用泛指词汇,如flag,tmp等,应该使用特指词汇
2> 在同一个类不同的场景(contexts)中不要复用变量名;不同的场景最好使用不同的命名;
有意识的为变量名、宏名加上本模块的关键字,就不至于和其它模块、系统API的命名空间相冲突;
例如: 宏的名称过短,如:”DEBUG” 或 “_DEBUG”,很可能和别的模块,系统模块相冲突;
3>多重循环中,尽量少使用约定俗成的 i,j,k ,多使用有具体含义的命名。
二、代码格式
#include "./include.h" ///< if include is local header files, it should be like this.
int main() { ///< black space
}
if (true) {
} else {
}
for () {}
if (a == b) {}
while () {} ///< not while();
cout << "" << endl;
move(a, b); ///< but not end '; <black space>'
///< to add more
三、注释:
1.函数命名时,尽量处理成 Doxygen 可处理的注释格式
/**
*@brief:这是....
*/
///< some words
@file 档案的批注说明。
@author 作者的信息
@brief 用于 class 或 function 的简易说明,例:
@brief 本函数负责打印错误信息串。
@param 主要用于函数说明中,后面接参数的名字,然后再接
关于该参数的说明。
@return 描述该函数的返回值情况,例:
@return 本函数返回执行结果,若成功则返回TRUE,
否则返回 FLASE。
@retval 描述返回值类型,例:
@retval NULL 空字符串。
@retval !NULL 非空字符串。
@note 注解
@brief 注释文字
@exception 可能产生的异常描述,例:
@exception 本函数执行可能会产生超出范围的异
常。
@date 日期
@version 软件版本
2.当代码比较长,特别是有多重嵌套时,应当在一些段落
的结束处加注释,便于阅读。
while(condition1)
{
while(condition2){
}/*<应注释说明>*/
}/*<应注释说明>*/
3.函数注释举例:
/**
* @brief 功能 : <函数实现功能>
* @param [in] 输入参数 1 : 参数说明
* @param [out] 输出参数 2 : 参数说明
* @return 描述该函数的返回值情况
* @exception 可能抛出的异常及其说明(如果有的话)
* @note 注意事项(如果有的话 )
*/
4.文件注释包含两部分:版权公告,文件内容公告:
/**
* @copyright 2008-2011, Zhejiang Insigma Group Co.,Ltd.
* @version <版本号>
* @author <xxx>, [yyy], [zzz] ...(作者和逗号分割的修改者列表)
*/
/**
* @file 文件名
* @brief <描述文件的功能等相关信息>
* 版本历史
* @date 2011-02-17 - Created file v0.2, 2011-03-02–Edited file V0.3 */
5. TODO 注释是为了标记一些未完成或完成的不尽如人意的地方,通过搜索就可以知道还有哪些活要干。
/*TODO@Bill: Remove t
his code when all clients can handle XML
responses.
*/
最后:
注释是对代码的“提示” ,而不是文档。程序中的注释不可喧宾夺主,注释太多会让人眼花缭乱
四、文档规范
1.所有头文件都应该使用#define防止被多重包含:
#ifndef FOO_BAR_H_
#define FOO_BAR_H_
/*文件内容*/
#endif //防止头文件被重复包含
2.#include 包含顺序:
项目内的.h 文件
C核心库
C++库
第三方库的.h文件
四、其他习惯
@note:其他衡量程序健壮程度的指标:扇入(该模块被调用的父模块个数),扇出(该模块调用的子模块个数),圈复杂度(独立运行路径条数),圈复杂度越大程序越难以维护容易出错。