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