C++变量命名规则

时间:2021-08-30 22:21:57

参考:Google C++编码规范
参考:http://blog.sina.com.cn/s/blog_8a7012cf01017h9p.html

最重要的一致性规则是命名管理,命名风格直接可以直接确定命名实体是:类型、变量、函数、常量、宏等等,无需查找实体声明,我们大脑中的模式匹配引擎依赖于这些命名规则。 命名规则具有一定随意性,但相比按个人喜好命名,一致性更重要,所以不管你怎么想,规则总归是规则。

函数命名、变量命名、文件命名应具有描述性,不要过度缩写,类型和变量应该是名词,函数名可以用“命令性”动词。

如何命名: 尽可能给出描述性名称,不要节约空间,让别人很快理解你的代码更重要,好的命名选择:
int num_errors; // Good.
int num_completed_connections; // Good.

丑陋的命名使用模糊的缩写或随意的字符:
int n; // Bad - meaningless.
int nerr; // Bad - ambiguous abbreviation.
int n_comp_conns; // Bad - ambiguous abbreviation.

类型和变量名一般为名词:如
FileOpener、num_errors。

函数名通常是指令性的,如
OpenFile()、set_num_errors(),
访问函数需要描述的更细致,要与其访问的变量相吻合。

缩写: 除非放到项目外也非常明了,否则不要使用缩写,例如:
// Good
// These show proper names with no abbreviations.
int num_dns_connections; // Most people know what “DNS” stands for.
int price_count_reader; // OK, price count. Makes sense.

// Bad!
// Abbreviations can be confusing or ambiguous outside a small group.
int wgc_connections; // Only your group knows what this stands for.
int pc_reader; // Lots of things can be abbreviated “pc”.

不要用省略字母的缩写:
int error_count; // Good.
int error_cnt; // Bad

序号 名称 命名举例 解释
1 文件名 my_useful_class.cpp 全小写,带下划线
2 命名空间 google_awesome_project 全小写,带下划线,目录命名
3 变量名 chbuf 类型前缀开头,全小写,带下划线
4 成员变量 m_bok m_开头,后同变量
5 全局变量 g_strbuf g_开头,后同变量
6 类名 MyExcitingClass 大写开头,无下划线,单词首字母大写
7 常量名 kDaysInAWeek k开头,后同类名
8 函数名 AddTableEntry() 动词开头,后同类名
9 枚举 emWeek em开头,后同类名;变量全大写

1、文件命名(File Names)
文件名要全部小写,可以包含下划线(_)或短线(-),按项目约定来。

可接受的文件命名:
my_useful_class.cc
my-useful-class.cc
myusefulclass.cc

2、类型命名(Type Names)
类型命名每个单词以大写字母开头,不包含下划线:
MyExcitingClass、MyExcitingEnum。
所有类型命名——类、结构体、类型定义(typedef)、枚举——使用相同约定,例如:

// classes and structs
class UrlTable { …
class UrlTableTester { …
struct UrlTableProperties { …

// enums
enum UrlTableErrors { …

3、变量命名(Variable Names)
变量名一律小写,单词间以下划线相连,类的成员变量以下划线结尾

4、常量命名(Constant Names)
在名称前加k:kDaysInAWeek。 所有编译时常量(无论是局部的、全局的还是类中的)和其他变量保持些许区别,k后接大写字母开头的单词: const int kDaysInAWeek = 7;

5、 函数命名(Function Names)
普通函数(regular functions,译者注,这里与访问函数等特殊函数相对)大小写混合,存取函数(accessors and mutators)则要求与变量名匹配:MyExcitingFunction()、MyExcitingMethod()、my_exciting_member_variable()、set_my_exciting_member_variable()。
普通函数: 函数名以大写字母开头,每个单词首字母大写,没有下划线: AddTableEntry() DeleteUrl()

6、命名空间(Namespace Names)
命名空间的名称是全小写的,其命名基于项目名称和目录结构:
google_awesome_project。

7、枚举命名(Enumerator Names)
枚举值应全部大写,单词间以下划线相连:MY_EXCITING_ENUM_VALUE。
枚举名称属于类型,因此大小写混合:UrlTableErrors。
enum UrlTableErrors {
OK = 0, ERROR_OUT_OF_MEMORY, ERROR_MALFORMED_INPUT,
};

类型 举例 解释
1、 整型前缀
int nId; //int前缀 n
short sId; //short前缀:s
unsigned int unId // unsigned int 前缀:un
long lId; //long前缀:l
2、 浮点型前缀
float fValue; //float前缀:f
double dValue; //double前缀:d
3、 字符型前缀
char chChar; //char前缀:ch
4、 字符串前缀
char szPath; //char字符串前缀:sz
string strPath; //string字符串前缀:str
CString strPath; //MFC CString类前缀:str
5、 布尔型前缀
bool bIsOK; //bool类型前缀:b
6、 指针型前缀
char * pPath; //指针前缀:p
7、 数组前缀
int arrnNum; //数组前缀:arr
String arrstrName; //数组前缀+类型前缀+名称
8、 结构体前缀
STUDENT tXiaoZhang; //结构体前缀:t
9、 枚举前缀
enum emWeek; //枚举前缀:em
10、 STL容器前缀
vector vecValue; //vector容器前缀:vec