C++編碼規範(1):代碼注釋
C++編碼規範(2):命名規範
如果你代碼中的變數名,函數數,類名都取得很好,不僅是個有意義的詞或短語,而且確切的表達了該變數或函數的功能.那讀起代碼來就像看文章一樣,絕對是一種享受.當然理想是美好的,現實可是殘酷的.很少有人能做到這樣.一來嘛你英語詞彙量得多,不樣不容易找到那麼多合適並貼切的詞.二來就是有些片語合就會很長,這樣不得不用些縮寫,而縮寫就不是每個人都認識,對一些人來說和無意義的字母沒啥區別,只要你英語好才能一眼瞧出來.
當然當你使用一個程式設計語言的話,裡面已經弄出很多詞來做關鍵字了,當你看熟了看多了後就會看著很舒服很順眼.但如果你學個啥架構,比如MFC,突然發現那麼多宏名,還有一些類型名(其實也是宏轉換整出來的). 就會覺得非常不順眼,非常醜陋.這些類型名大部分是一些縮寫,雖然是代表著確切的意思,但由於縮寫的太厲害了,你跟瞧著一堆沒意義的字母沒啥區別.當然你要用多了看著也就順眼了.
關於命名有兩個比較出名的專業名詞:Hungarian(匈牙利) , Camel(駱駝) , Pascal(帕斯卡)
匈牙利命名法
變數名=屬性+類型+對象描述.
例如int m_iNumber;
如果是局部變數一般就不需要屬性了,所以就是int iNumber;
1.其中對象描述的名稱都要求有明確含義,可以取對象名字全稱或名字的一部分.可以起自解釋的作用,從名字中就可以看出變數的功能.
2.其中屬性(有個底線)包括: g_表示全域變數, c_表示常量 , m_表示C++類成員變數, s_ 表示靜態變數 , sm_表示靜態成員變數
3.類型部分都是用類型關鍵字的縮寫表示:
| 類型名 |
縮寫 |
| char |
c |
| short |
s |
| int |
i |
| long |
l |
unsigned char |
uc |
unsigned short |
us |
| unsigned int |
ui |
| unsigned long |
ul |
| float |
f |
| double |
d |
| long double |
ld |
| bool |
b |
| void |
v |
| pointer |
p |
| enum |
n |
| struct |
x |
| union |
w |
| array |
a |
| windows類型 |
|
| string |
sz |
| DWORD |
dw |
| HANDLE |
h |
| TCHAR |
tc |
| WCHAR |
wc |
| smart pointer |
sp |
| LPSTR |
pc |
| LPTSTR |
ptc |
| LPWSTR |
pwc |
| |
|
據說這種命名法是一們叫Charles Simonyi的匈牙利程式員發明的,他也在微軟工作過.所以你查看MFC中的一些源碼會發現都用的匈牙利命名法,你要是開發中用到MFC可能也傾向於使用這種命名規範.
優點與缺點:
匈牙利命名的優點顯而易見,能從名字本身擷取到很多資訊,知道變數的類型或要實現的功能.
缺點是添加這些首碼會使變數名變長,變數名一長就會顯得不雅,另外就是開發人員要多敲幾個字母.當然還有其他很多缺點.
另外就是匈牙利命名主要針對基本類型變數名,但在物件導向語言中肯定到處是類名和函數名,那類名和函數名該怎麼取呢? 此時在它們前面加個啥首碼沒有太多意義的.
此時變數名=屬性+類型+對象描述 ,中最有對象描述這一項可派得上用場了,但是對象描述可沒給我們帶來啥明確的格式指導,比如描述資訊一長,就很不利於我們眼睛的識別.
於是就需要一些規範應用於對象描述的格式,另外一些命名規範就出現了.
駝峰命名法
駱駝有一個很明顯的特徵就是背像個山峰一樣,有凹下去與凸起來的部分.
於是這種命名法就借鑒了這個特徵,讓變數名通過某些字母大寫來達到凹凸的效果,這有利於眼睛識別,因為如果都是小寫或大寫都不利於眼睛識別.
小駝峰命名法
除第一個單詞首字母小寫,其他單字首大寫.
例如 int myPhoneNumber;
大駝峰命名法(又叫Pascal法)
所以單字首大寫
例如 void GetPhoneNumber();
實際上駝峰命名法與匈牙利命名法並不衝突,有時還可以綜合使用.
匈牙利法是
變數名=屬性+類型+對象描述
我們可以讓前兩者不變,只在對象描述中應用駝峰法.當然了也可以中單獨使用駝峰法,不需要屬性和類型資訊.
在C#中基本上習慣上只使用駝峰法,不再需要屬性或類型的資訊.因為VS這開發環境的智能感覺支援的非常好,你把滑鼠放哪個變數上會馬上顯示出類型等相關資訊.而且由於C#中在隱式類型轉換時要求較嚴,必須是精度不會降低,不會出現溢出.所以類型資訊對我們用處也不是太大了.最重要的是對象描述的功能性資訊了.
一般函數名和類名都用大駝峰命名法,不過在MFC中類名一般推薦是匈牙利與駝峰結合的變體,類前面加一個大寫的字母C,後面部分就是大駝峰法了
底線命名法
就是單詞之間用底線串連
比如int MY_NUMBER;
一般用的不多,不過像PL/SQL裡面就用的特別多,因為PL/SQL不像C++和C#變數是區分大小寫.所以底線可能更好點.
在C++中一般宏都全部大寫,然後單詞間用底線分開.