若是想要有效的管理一個稍微複雜一點的體系,針對其中事物的一套統1、帶層次結構、清晰明瞭的命名準則就是必不可少並且很是好用的工具。程序員
活躍在生物學、化學、軍隊、監獄、黑社會、恐怖組織等各個領域內的大量有識先輩們都曾經無數次地以實際行動證實了以上公理的正確性。除了上帝(設它能夠改變世間萬物的秩序)之外,相信沒人有實力對它不屑一顧。數組
在軟件開發這一高度抽象並且十分複雜的活動中,命名規則的重要性更顯得尤其突出。一套定義良好而且完整的、在整個項目中統一使用的命名規範將大大提高源代碼的可讀性和軟件的可維護性。函數
在引入細節以前,先說明一下命名規範的總體原則:工具
同一性spa |
在編寫一個子模塊或派生類的時候,要遵循其基類或總體模塊的命名風格,保持命名風格在整個模塊中的同一性。指針 |
標識符組成對象 |
標識符采用英文單詞或其組合,應當直觀且能夠拼讀,可望文知意,用詞應當準確。進程 |
最小化長度 && 最大化信息量原則事件 |
在保持一個標識符意思明確的同時,應當儘可能縮短其長度。ci |
避免過於類似 |
不要出現僅靠大小寫區分的類似的標識符,例如「i」與「I」,「function」與「Function」等等。 |
避免在不一樣級別的做用域中重名 |
程序中不要出現名字徹底相同的局部變量和全局變量,儘管二者的做用域不一樣而不會發生語法錯誤,但容易令人誤解。 |
正確命名具備互斥意義的標識符 |
用正確的反義詞組命名具備互斥意義的標識符,如:"nMinValue"和"nMaxValue","GetName()" 和 "SetName()" .... |
避免名字中出現數字編號 |
儘可能避免名字中出現數字編號,如Value1,Value2等,除非邏輯上的確須要編號。這是爲了防止程序員偷懶,不願爲命名動腦筋而致使產生無心義的名字(由於用數字編號最省事)。 |
類/結構
除了異常類等個別狀況(不但願用戶把該類看做一個普通的、正常的類之狀況)外,C++類/結構 的命名應該遵循如下準則:
C++類/結構的命名 |
類的名稱都要以大寫字母「C」開頭,後跟一個或多個單詞。爲便於界定,每一個單詞的首字母要大寫。 |
推薦的組成形式 |
類的命名推薦用"名詞"或"形容詞+名詞"的形式,例如:"CAnalyzer", "CFastVector" .... |
不一樣於C++類的概念,傳統的C結構體只是一種將一組數據捆綁在一塊兒的方式。傳統C結構體的命名規則爲:
傳統C結構體的命名 |
傳統C結構體的名稱所有由大寫字母組成,單詞間使用下劃線界定,例如:"SERVICE_STATUS", "DRIVER_INFO" .... |
|
函數
函數的命名 |
函數的名稱由一個或多個單詞組成。爲便於界定,每一個單詞的首字母要大寫。 |
推薦的組成形式 |
函數名應當使用"動詞"或者"動詞+名詞"(動賓詞組)的形式。例如:"GetName()", "SetValue()", "Erase()", "Reserve()" .... |
保護成員函數 |
保護成員函數的開頭應當加上一個下劃線「_」以示區別,例如:"_SetState()" .... |
私有成員函數 |
相似地,私有成員函數的開頭應當加上兩個下劃線「__」,例如:"__DestroyImp()" .... |
虛函數 |
虛函數習慣以「Do」開頭,如:"DoRefresh()", "_DoEncryption()" .... |
回調和事件處理函數 |
回調和事件處理函數習慣以單詞「On」開頭。例如:"_OnTimer()", "OnExit()" .... |
|
變量
變量應該是程序中使用最多的標識符了,變量的命名規範多是一套C++命名準則中最重要的部分:
變量的命名 |
變量名由做用域前綴+類型前綴+一個或多個單詞組成。爲便於界定,每一個單詞的首字母要大寫。 對於某些用途簡單明瞭的局部變量,也可使用簡化的方式,如:i, j, k, x, y, z .... |
做用域前綴 |
做用域前綴標明一個變量的可見範圍。做用域能夠有以下幾種:
前綴 |
說明 |
無 |
局部變量 |
m_ |
類的成員變量(member) |
sm_ |
類的靜態成員變量(static member) |
s_ |
靜態變量(static) |
g_ |
外部全局變量(global) |
sg_ |
靜態全局變量(static global) |
gg_ |
進程間共享的共享數據段全局變量(global global) |
除非不得已,不然應該儘量少使用全局變量。 |
類型前綴 |
類型前綴標明一個變量的類型,能夠有以下幾種:
前綴 |
說明 |
n |
整型和位域變量(number) |
e |
枚舉型變量(enumeration) |
c |
字符型變量(char) |
b |
布爾型變量(bool) |
f |
浮點型變量(float) |
p |
指針型變量和迭代子(pointer) |
pfn |
特別針對指向函數的指針變量和函數對象指針(pointer of function) |
g |
數組(grid) |
i |
類的實例(instance) 對於常常用到的類,也能夠定義一些專門的前綴,如:std::string和std::wstring類的前綴能夠定義爲"st",std::vector類的前綴能夠定義爲"v"等等。 |
類型前綴能夠組合使用,例如"gc"表示字符數組,"ppn"表示指向整型的指針的指針等等。 |
推薦的組成形式 |
變量的名字應當使用"名詞"或者"形容詞+名詞"。例如:"nCode", "m_nState","nMaxWidth" .... |
|
常量
C++中引入了對常量的支持,常量的命名規則以下:
常量的命名 |
常量名由類型前綴+全大寫字母組成,單詞間經過下劃線來界定,如:cDELIMITER, nMAX_BUFFER .... 類型前綴的定義與變量命名規則中的相同。 |
|
枚舉、聯合、typedef
枚舉、聯合及typedef語句都是定義新類型的簡單手段,它們的命名規則爲:
枚舉、聯合、typedef的命名 |
枚舉、聯合、typedef語句生成的類型名由全大寫字母組成,單詞間經過下劃線來界定,如:FAR_PROC, ERROR_TYPE .... |
|
宏、枚舉值
宏、枚舉值的命名 |
宏和枚舉值由全大寫字母組成,單詞間經過下劃線來界定,如:ERROR_UNKNOWN, OP_STOP .... |
|