命名風(fēng)格直接可以確定命名實(shí)體是:類型谈火、變量糯耍、函數(shù)囊嘉、常量、宏等等舵鳞,無(wú)需查找實(shí)體聲明蜓堕,大腦中的模式匹配引擎依賴于這些命名規(guī)則虐块。
1.通用命名規(guī)則
函數(shù)命名嘉蕾、變量命名。文件命名都應(yīng)具有描述性儡率,不要過(guò)度縮寫挂据,類型和變量應(yīng)該是名詞崎逃,函數(shù)名可以用命令性動(dòng)詞
如何命名:
盡可能給出描述性名詞眉孩,讓人理解你的代碼浪汪。
類型和變量名一般為名詞,如FileOpener死遭,num_errors
函數(shù)名通常是指令性的,如OpenFile(),set_num_errors(),訪問(wèn)函數(shù)要與其訪問(wèn)的變量相吻合
2.文件命名
文件名要全部小寫钉迷,可以包含下劃線(_)或短線(-),按項(xiàng)目約定來(lái)
可接受的文件命名:
my_useful_class.c
my-useful-class.c
myusefulclass.c
不要用已經(jīng)存在與usr/include下的文件名(對(duì)UNIX钠署、Linux系統(tǒng)而言),如db.h
通常枷颊,盡量讓文件名更加明確该面,http_server_logs.h就比logs.h好隔缀,定義類文件名一般成對(duì)出現(xiàn),如foo_bar.h和foo_bar.c猾瘸,對(duì)應(yīng)類FooBar
內(nèi)聯(lián)函數(shù)必須放在h文件中,短的話直接放在h中淮悼,長(zhǎng)的話放到-inl.h結(jié)尾的文件中袜腥。對(duì)于包含大量?jī)?nèi)聯(lián)代碼的類钉汗,可以有三個(gè)文件:
url_table.h usr_table.c url_table-inl.h
3.類型命名
類型命名每個(gè)單詞以大寫字母開(kāi)頭鲤屡,不包含下劃線:MyExcitingClass酒来。
所有類型命名——類肪凛、結(jié)構(gòu)體、類型定義(typedef)衡奥、枚舉——使用相同約定远荠,如:
class UrlTable{...
struct UrlTableProperties{...
typedef hash_map<UrlTableProperties*, string> PropertiesMap;
enum UrlTableErrors{...
4.變量命名
變量名一律小寫,單詞間以下劃線相連档址,類的成員變量以下劃線結(jié)尾守伸,如my_exciting_local_variable、my_exciting_member_variable_尼摹。
結(jié)構(gòu)體的數(shù)據(jù)成員可以和普通變量一樣剂娄,不用像類那樣以下劃線結(jié)尾
全局變量沒(méi)有特別要求阅懦,少用就好,可以用g_會(huì)其他易與局部變量區(qū)分的標(biāo)志為前綴
5.常量命名
在名稱前加k:kDaysInAWeek惯吕。
所有編譯時(shí)常量(無(wú)論是局部的怕午、全局的還是類中的)和其他變量保持些許區(qū)別,k后接大寫字母開(kāi)頭的單詞堡距。
const int kDaysInAWeek = 7;
6.函數(shù)命名
普通函數(shù)大小寫混合吏颖,存取函數(shù)則要求與變量名匹配:MyExcitingFunction(),MyExcitingMethod(),my_exciting_member_varible,set_my_exciting_member_variable()恨樟。
普通函數(shù):函數(shù)名以大寫字母開(kāi)頭,每個(gè)單詞首字母大寫缩多,沒(méi)有下劃線
AddTableEntry(), DeleteUrl()
存取函數(shù):這里摘錄一個(gè)擁有實(shí)例變量num_entries_的類养晋。
class MyClass{
public:
int num_entries() const{ return num_entries_;}
void set_num_entries(int num_entries){num_entries_ = num_entries;}
private:
int num_entries_;
};
其他短小的內(nèi)聯(lián)函數(shù)也可以使用小寫字母,例如逊抡,在循環(huán)中調(diào)用這樣的函數(shù)甚至都不需要緩存其值零酪,小寫命名就可以接收。
注:從這一點(diǎn)上可以看出孝凌,小寫的函數(shù)名意味著可以直接內(nèi)聯(lián)使用月腋。
7.命名空間
命名空間的名稱全是小寫的榆骚,其命名基于項(xiàng)目名稱和目錄結(jié)構(gòu):google_awesome_project。
關(guān)于命名空間穆碎,參考第二篇命名空間
8.枚舉命名
枚舉值應(yīng)該全部大寫所禀,單詞間以下劃線相連:MY_EXCITING_ENUM_VALUE色徘。
枚舉名稱屬于類型,因此大小寫混合:UrlTableErrors褂策。
enum UrlTableErrors{
OK = 0,
ERROR_OUT_OF_MEMORY,
};
9.宏命名
參考第四篇預(yù)處理宏斤寂,其命名想枚舉命名一樣全部大寫、使用下劃線:
define ROUND(x) ...
define PI_ROUNDED 3.0
10.命名規(guī)則外
當(dāng)命名與現(xiàn)有C++實(shí)體相似的對(duì)象時(shí)罗侯,可參考現(xiàn)有命名約定:
bigopen()
函數(shù)名溪猿,參考o(jì)pen()
unit
typedef類型定義
bigpos
struct或class诊县,參考pos
sparse_hash_map
STL相似實(shí)體;參考STL命名約定
LONGLONG_MAX
常量避除,類似INT_MAX
總結(jié):
1)總體規(guī)則:不要隨意縮寫驹饺,出函數(shù)名可適當(dāng)為東此外缴渊,其他命名盡量使用清晰易懂的名詞
2)宏、枚舉等全部使用大寫 + 下劃線
3)變量(含類結(jié)構(gòu)體成員變量)蝌借、文件指蚁、命名空間凝化、存取函數(shù)等全部使用小寫+下劃線。類成員變量以下劃線結(jié)尾搓劫,全部變量以g_開(kāi)頭枪向。
4)普通函數(shù)、類型(含結(jié)構(gòu)體陨亡、枚舉類型)常量等使用大小寫混合,不含下劃線蛙埂。
5)參考現(xiàn)有或相近命名約定