参考: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 |