编码规范
1. 类成员函数
? ?
成员函数应该以完整的英文描述命名,函数名的第一个单词通常是一个动词。如openAccount、save等
对于存取类属性的成员函数有以下的命名规则:
? Getter:访问类的属性并返回。命名以get开头,如果返回值是boolean,以is
开头;如getFirstName、isAtEnd等。boolean返回值的另一种命名方法是使用has、can,如hasDependents、canPrint等
?
? Setter:设置类属性。命名以set开头,如setFirstName 成员函数的可见性,一个成员函数有三种可能的可见性:public、protected、private。如果一个成员函数不必是public的,那么设置成protected;如果它不必是protected,那么设置成private。
public:可以被类以外的其他函数访问
protected:可以被该类及其继承类的成员函数访问 ?
private:只可以被该类的其他成员函数访问,不包括继承类 成员函数的注释
在C++中,类成员函数的定义和声明是分开的。那么有三个要注释的地方。 一个是成员函数的声明(在.h文件夹中),该处注释给出该函数简短的功能描述,使用的上下文关系(前条件、后条件等)以及可能抛出的异常。
成员函数定义处的注释给出函数详细的功能描述、输入输出、代码更改记录。 成员函数体注释给出函数控制结构、功能流程等 注释编写格式参见“注释编写”部分。
2. 成员变量
?
使用m_开头,尽量使用完整的英文描述,如m_firstName、m_grandTotal等,而不是使用x1、y1之类的名字;另一种是使用Hungarian命名法,如m_sFirstName、m_iZipCode等
我们对变量要求使用Hungarian命名法。标准如下: i short类型 例:short iCount; n int类型 例:int nCount; l long类型 f d c s
例:long lDataCount; 例:float fDataCount; 例:double dDataCount; 例:char cInKey; 例:char sName[20]; 例:char *pMemAddr;
float类型 double类型 char类型 字符串类型
p 指针类型
? ? ? ? ?
st 结构类型 例:ParamStruct stMystruct;
a 数组类型 例:int anMyArray[20]; g 全局变量 例:char gcSysComm; o 对象类型 例:CTreeClass oTreeClass; 注意变量大小写搭配
变量名不要太长(<15)
避免使用仅在大小写上有差别的变量名,如m_firstName和m_firstname
对于组件变量,命名以组件名为后缀,并能描述出该组件的使用目的。如okButton、cancelButton、fileMenu,而不是button1, button2等。参见资源定义。 成员变量的注释
成员变量的注释应该包括:使用描述、所有可满足的不变式(这个较难)
3. 局部变量
? ? ? ?
尽量使用完整的英文描述,如firstName、grandTotal等,而不是使用x1、y1之类的名字;另一种是使用Hungarian命名法,如sFirstName、iZipCode等 注意变量大小写搭配 变量名不要太长(<15)
避免使用仅在大小写上有差别的变量名,如firstName和firstname
4. 参数
参数命名同局部变量
5. 类、接口等
? ? ?
在C++中,类命名以C开头,如CKernel等。 类的定义应该尽量减小public和protected接口。 类的注释(放在类头)
类功能描述、类的更改记录、不变量(较难)
6. 注释的编写
? ? ?
注释应该简明,中英文不限
注释尽量不要跟代码放在同一行,变量定义部分例外。
文件头的注释:在新建立一个文件时,在文件头加入如下注释:
/* * $Log$
*/
以利用CVS来跟踪代码更新历史。
由于现在不是采用CVS做版本管理,故文件头格式规定如下:
/*********************************************************
* 文件名 * * * *
文件功能 编程者 日期 项目名
:
: :
: SUI/
:
* 操作系统 * 履历 : Windows98 :
* 编号----日期--------注释------------------------------- * 00 97.06.19 初期作成 * 01
97.06.20 修改×××
*********************************************************/ 履历部分现在可以不添,等版本基本稳定以后再处理。 ?
想利用Doxygen提取出来的注释,使用以下注释方式:
Qt Style:
/*!
注释 */
单行模式: //! 注释 /**
* 注释 */
单行模式: /// 注释
JavaDoc Style:
我们的系统对注释要求使用JavaDoc模式。
? Doxygen根据注释生成的文档包括两个部分:Brief和Detail.
在Qt Style中,
//! A function variable. /*!
Details of handler. */
int (*handler)(int a,int b);
单行模式的注释生成的是Brief部分的文档
而两个注释合并部分则生成Detail部分的文档。生成的文档如下: Brief部分:
int (* handler )(int a,int b) A function variable. More... Details部分:
int(* Test::handler)(int a,int b) A function variable. Details of handler.
在JavaDoc Style中:
Doxygen把注释的第一句作为Brief注释。如 /**
* a public variable. * Details of handler. */
int publicVar; 生成的文档如下:
Brief部分:
int (* handler )(int a,int b) a function variable. More... Detail部分:
int(* Test::handler)(int a,int b)
a function variable. Details of handler. 如果要在Brief注释中包含符号”.”,必须在”.”后加上”\\”。 所以在写注释的时候要特别注意Brief和Detail的分别。
要求把Brief部分放在函数声明部分,而把Detail放在函数定义部分。 ? 如何对一组代码使用同一个注释
使用组来处理,如:
//@{
/** 注释 */
void func1(); void func2(); //@}
那么func1和func2使用同一个注释。 ? ? ?
类定义的注释:描述这个类的作用,能被Doxygen识别
成员函数的声明:描述函数的作用,使用上下文限制,能被Doxygen识别 成员函数的定义:描述函数作用,输入输出,能被Doxygen识别。
/**
* 函数功能
* @param 输入(如:i: index of list) * @return 输出(如:result: a session (result指函数的返回值),id: connection
?
id) */
以@或\\开头的是Doxygen可以识别的宏,常用的有以下一些宏。 param
描述返回值
see {references} 引用参考
exception
7. 资源定义
对于资源的ID定义,应该遵循以下的原则:
? 对话框资源以IDD_DIALxyy方式命名。xyy为对话框的编号,具体如下:
Client: x = 1 节目列表对话框:IDD_DIAL101 配置对话框: IDD_DIAL102 Server: x = 2 节目编辑对话框:IDD_DIAL201 配置对话框: IDD_DIAL202
......
? 对话框中的控制部件的命名方式为:IDC_XXxxxyy。
对话框画面中其他各个项目的ID命名由“前缀IDC_XX+画面编号xxx+顺序号yy”组成。具体规定如下:
XX:控件类型编号,xxx:控件所属对话框的编号,yy:同一画面中同类控件的编号(00~99)。
Static Text
Edit Box Group Box Button Check Box Radio Button Combo Box List Box 水平滚动条 垂直滚动条 List Control Tree Control
Tab Control IP Address
: IDC_STxxxyy : IDC_EBxxxyy : IDC_GBxxxyy : IDC_BUxxxyy : IDC_KBxxxyy : IDC_RBxxxyy : IDC_CBxxxyy : IDC_LBxxxyy : IDC_HSxxxyy : IDC_VSxxxyy : IDC_LCxxxyy : IDC_TCxxxyy : IDC_TBxxxyy : IDC_IPxxxyy
? 与画面对应的类的命名
与画面对应的类及文件名与画面编号的关系为:
画面ID : IDD_DIALxyy
CLASS名 : CDialxyy 头文件名 : Dialxyy.h 源文件名 : Dialxyy.cpp
例如: 对编号为101的画面, 其CLASS名、文件名对应为: 画面ID : IDD_DIAL101 CLASS名
: CDial101
头文件名 : Dial101.h 源文件名 : Dial101.cpp