1. 程式人生 > >C++編碼規範(2):命名規範

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++中一般巨集都全部大寫,然後單詞間用下劃線分開.