命名规范原则

必须要遵守的规则

  1. 变量名只能是字母(A-Z,a-z)、数字(0-9)或下划线。
  2. 第一个字母不能是数字,例如 2L 这不是一个合法的C++变量。
  3. 不能是c++关键字,例如不能用 class 、 int 这些单词来命名一个变量。
  4. 变量名区分大小写。

尽量遵守的规则

  1. 不用拼音。
  2. 尽量用较少的单词。
  3. 有含义的变量或者多处调用的变量,用有含义的单词,不要用i,j,k。
  4. 同一个程序中用同一种命名方法。

常用命名法

驼峰命名法

指混合使用大小写字母来构成变量和函数的名字。
当变量名或函数名是由一个或多个单词连结在一起,而构成的唯一识别字时,第一个单词以小写字母开始,从第二个单词开始以后的每个单词的首字母都采用大写字母,例如:

1
2
string myName;
int myAge;

帕斯卡命名法

帕斯卡命名法指当变量名和函式名称是由二个或二个以上单词连结在一起,而构成的唯一识别字时,每个单词首字母大写,例如:

1
2
string MyName;
int MyAge;

匈牙利命名法

它通过在变量名前面加上相应的小写字母的符号标识作为前缀,标识出变量的作用域,类型等这些符号可以多个同时使用,基本原则是:变量名=属性+类型+对象描述
匈牙利命名法关键是:标识符的名字以一个或者多个小写字母开头作为前缀;前缀之后的是首字母大写的一个单词或多个单词组合,该单词要指明变量的用途。

1
2
string strMyName;
int iMyAge;

这些符号可以多个同时使用,顺序是先m_(成员变量), 再指针,再简单数据类型,再其他。例如:m_pszStr, 表示指向一个以0字符结尾的字符串的指针成员变量。

前缀 意义 前缀 意义
属性部分
g_ 全局变量 c_ 常量
m_ C++类成员变量 s_ 静态变量
类型部分
p 指针 i 整型
fn 函数 n 短整型
v 无效 s/sz/str 字符串
h 句柄 c/ch 字符
l 长整型 u 无符号
b 布尔 by 字节
f 浮点型 w
d 双精度浮点 dw 双字
描述部分
Max 最大 Cnt 基数
Min 最小 Src 源对象
Init 初始化 Dst 目标对象
Tmp 临时变量

下划线命名法

下划线命名法是在不同单词之间添加下划线

1
2
string my_name
int my_age

不同类型常用命名规则

文件命名

文件名全部小写,可以包含下划线_或者连字符-,C++文件以.cc结尾,头文件以.h结尾

1
2
3
my_useful_class.cc
my-useful-class.cc
myusefulclass.cc

类命名

类的每个单词首字母均大写,不包含下划线:MyUsefulClass

变量命名

变量(包括函数参数)和数据成员名一律小写, 单词之间用下划线连接. 类的成员变量以下划线结尾。

普通变量

1
2
string table_name;  // 好 - 用下划线.
string tablename; // 好 - 全小写.

类数据成员

不管是静态的还是非静态的, 类数据成员都可以和普通变量一样, 但要接下划线。

1
2
3
4
5
6
7
class TableInfo {
...
private:
string table_name_; // 好 - 后加下划线.
string tablename_; // 好.
static Pool<TableInfo>* pool_; // 好.
};

结构体变量

不管是静态的还是非静态的, 结构体数据成员都可以和普通变量一样, 不用像类那样接下划线:

1
2
3
4
5
struct UrlTableProperties {
string name;
int num_entries;
static Pool<UrlTableProperties>* pool;
};

常量命名

常量、宏定义和枚举一般都是所有字母大写,特别是宏定义,在不同字母之间,可以加上下划线,也可以不加。

1
2
3
4
5
6
7
8
9
10
#define List_INIT_SIZE 100 
#define LISTINCREMENT 10
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -1

int LENGTH = 10;
int LIST_MAX_SIZE = 50;

函数命名

常规函数使用大小写混合, 取值和设值函数则要求与变量名匹配:

1
2
3
4
MyExcitingFunction()
MyExcitingMethod()
my_exciting_member_variable()
set_my_exciting_member_variable()

参考

[1] C++类、结构体、函数、变量等命名规则详解
[2] C++ 变量命名规则与命名方案
[3] Google C++编码规范