1. 基本要求
- 规则
- 变量名只能是字母(A-Z,a-z)和数字(0-9)或者下划线(_)组成。
- 第一个字母必须是字母或者下划线开头。
- 不能使用C++关键字来命名变量,以免冲突。
- 变量名区分大小写。
- 命名原则
- 命名采用驼峰式,如procGetRiskFactor。不采用驼峰式,则采用下划线如:get_risk_factor。
- 在保持一个标识符意思明确的同时,应当尽量缩短其长度。
- 标识符采用英文单词或其组合,应当直观且可以拼读,可望文知意,用词应当准确。
- 不要出现仅靠大小写区分的相似的标识符,例如“i”与“I”,“function”与“Function”等等。
- 避免在不同级别的作用域中重名。如全局变量和局部变量中出现相同的变量名。
- 用正确的反义词组命名具有互斥意义的标识符,如:“nMinValue"和"nMaxValue”,“GetName()” 和 “SetName()” …
- 尽量避免名字中出现数字编号,如Value1,Value2等,除非逻辑上的确需要编号。这是为了防止程序员偷懒,不肯为命名动脑筋而导致产生无意义的名字(因为用数字编号最省事)。
2. 命名前缀
2.1 类、结构
C++类/结构的命名 | 推荐的组成形式 |
---|
类的名称都要以大写字母“C”开头,后跟一个或多个单词。为便于界定,每个单词的首字母要大写。 | 类的命名推荐用"名词"或"形容词+名词"的形式,例如:“CAnalyzer”, “CFastVector” 。 |
2.2 函数
类型 | 说明 |
---|
函数的命名 | 函数的名称由一个或多个单词组成。为便于界定,每个单词的首字母要大写。 |
推荐的组成形式 | 函数名应当使用"动词"或者"动词+名词"(动宾词组)的形式。例如:“GetName()”, “SetValue()”, “Erase()”, “Reserve()” … |
保护成员函数 | 保护成员函数的开头应当加上一个下划线“_”以示区别,例如:“_SetState()” … |
私有成员函数 | 类似地,私有成员函数的开头应当加上两个下划线“__”,例如:“__DestroyImp()” … |
虚函数 | 虚函数习惯以“Do”开头,如:“DoRefresh()”, “_DoEncryption()” … |
回调和事件处理函数 | 回调和事件处理函数习惯以单词“On”开头。例如:“_OnTimer()”, “OnExit()” … |
2.3 变量
- 变量命名
变量名由作用域前缀+类型前缀+一个或多个单词组成。为便于界定,每个单词的首字母要大写。对于某些用途简单明了的局部变量,也可以使用简化的方式,如:i, j, k, x, y, z … - 作用域前缀
前缀 | 说明 |
---|
无 | 局部变量 |
m | 类的成员变量(member) |
sm | 类的静态成员变量(static member) |
s | 静态变量(static) |
g | 外部全局变量(global) |
sg | 静态全局变量(static global) |
gg | 进程间共享的共享数据段全局变量(global global) |
- 类型前缀
前缀 | 说明 |
---|
n | 整型和位域变量(number) |
e | 枚举型变量(enumeration) |
c | 字符型变量(char) |
b | 布尔型变量(bool) |
f | 浮点型变量(float) |
p | 指针型变量和迭代子(pointer) |
w/dw | 字(双字)的前缀。DWORD dwMsgID; |
pfn | 特别针对指向函数的指针变量和函数对象指针(pointer of function) |
g | 数组(grid) |
i | 类的实例(instance)。对于经常用到的类,也可以定义一些专门的前缀,如:std::string和std::wstring类的前缀可以定义为"st",std::vector类的前缀可以定义为"v"等等。 |
- 类型前缀可以组合使用,例如"gc"表示字符数组,"ppn"表示指向整型的指针的指针等等。
- 组合形式
变量的名字应当使用"名词"或者"形容词+名词"。例如:“nCode”, “m_nState”,“nMaxWidth” …
2.4 常量
常量名由类型前缀+全大写字母组成,单词间通过下划线来界定,如:cDELIMITER, nMAX_BUFFER 。类型前缀的定义与变量命名规则中的相同。
2.5 枚举、联合、typedef
枚举、联合、typedef语句生成的类型名由全大写字母组成,单词间通过下划线来界定,如:FAR_PROC, ERROR_TYPE 。
2.6 宏、枚举值
宏和枚举值由全大写字母组成,单词间通过下划线来界定,如:ERROR_UNKNOWN, OP_STOP。
2.7 MFC控件
链接: MFC命名规则
MFC控件绑定值类别或者控件类类别,需要以m_开头并且加前缀。如:
控件 | 关联变量 |
---|
CEdit | m_EDT_strValue; //Edit绑定控件类别 |
CListBox | m_LB_nName; //ListBox |
CListCtrl | m_LC_Name; //ListCtrl; |
CComboBox | m_CB_Name; //ComboBox |
控件ID尽量简化并表明控件类型和意义。
控件 | 控件ID |
---|
Button | IDC_BNT_NAME |
Edit | IDC_EDT_NAME |
ListBox | IDC_LB_NAME |
ListCtrl | IDC_LC_NAME |
ComboBox | IDC_CB_NAME |
2.8 其他
序号 | 类型 | 命名 |
---|
1 | STL容器前缀 | vector vecValue; //vector容器前缀:vec |
2 | RECT矩形结构前缀 | RECT rcChild; //rc |
3 | 句柄前缀 | HWND hWndDlg; HBRUSH hBr; HPEN hPen; HBITMAP hBmpBack; |
4 | Windows颜色前缀 | COLORREF crFont; //cr |
5 | Windows DC前缀 | CDC dcClient; //dc |