C++編碼規範(2):命名規範

來源:互聯網
上載者:User

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

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.