1. 程式人生 > >C語言命名規範

C語言命名規範

1 三種流行的命名法則

 

目前,業界共有四種命名法則:駝峰命名法、匈牙利命名法、帕斯卡命名法和下劃線命名法,其中前三種是較為流行的命名法。

 

(1)駝峰命令法。正如它的名稱所表示的那樣,是指混合使用大小寫字母來構成變數和函式的名字,其實我們工作比較常用的就是駝峰命令法。例如,下面是分別用駱駝式命名法和下劃線法命名的同一個函式:

 

 

 

第一個函式名使用了駝峰命名法,函式名中的每一個邏輯斷點都有一個大寫字母來標記。第二個函式名使用了下劃線法,函式名中的每一個邏輯斷點都有一個下劃線來標記。

 

駝峰命名法近年來越來越流行了,在許多新的函式庫和Microsoft Windows這樣的環境中,它使用得當相多。另一方面,下劃線法是C出現後開始流行起來的,在許多舊的程式和UNIX這樣的環境中,它的使用非常普遍。

 

(2)匈牙利命名法。廣泛應用於象Microsoft Windows這樣的環境中。Windows 程式設計中用到的變數(還包括巨集)的命名規則為匈牙利命名法,這種命名技術是由一位能幹的 Microsoft 程式設計師查爾斯-西蒙尼(Charles Simonyi) 提出的。

 

匈牙利命名法通過在變數名前面加上相應的小寫字母的符號標識作為字首,標識出變數的作用域、型別等。這些符號可以多個同時使用,順序是先m_(成員變數)、再指標、再簡單資料型別、再其它。這樣做的好處在於能增加程式的可讀性,便於對程式的理解和維護。

 

例如:m_lpszStr, 表示指向一個以0字元結尾的字串的長指標成員變數。

匈牙利命名法關鍵是:識別符號的名字以一個或者多個小寫字母開頭作為字首;字首之後的是首字母大寫的一個單詞或多個單詞組合,該單詞要指明變數的用途。

 

(3)帕斯卡(pascal)命名法。與駝峰命名法類似,二者的區別在於:駝峰命名法是首字母小寫,而帕斯卡命名法是首字母大寫,如:

 

 

 

二者都是採用了帕斯卡命名法。

 

(4)三種命名規則的小結:MyData就是一個帕斯卡命名的示例;MyData是一個駝峰命名法,它第一個單詞的第一個字母小寫,後面的單詞首字母大寫,看起來像一個駱駝;iMyData是一個匈牙利命名法,它的小寫的i說明了它的型態,後面的和帕斯卡命名相同,指示了該變數的用途。

 

2 命名的基本原則

 

(1)識別符號的命名要清晰、明瞭,有明確含義,同時使用完整的單詞或大家基本可以理解的縮寫,避免使人產生誤解——儘量採用採用英文單詞或全部中文全拼表示,若出現英文單詞和中文混合定義時,使用連字元“_”將英文與中文割開。較短的單詞可通過去掉“母音”形成縮寫;較長的單詞可取單詞的頭幾個字母形成縮寫;一些單詞有大家公認的縮寫。例如:temp->tmp、flag->標誌暫存器、statistic->stat、increment->inc、message->msg等縮寫能夠被大家基本認可。

 

(2)命名中若使用特殊約定或縮寫,則要有註釋說明。應該在原始檔的開始之處,對檔案中所使用的縮寫或約定,特別是特殊的縮寫,進行必要的註釋說明。

 

(3)自己特有的命名風格,要自始至終保持一致,不可來回變化。個人的命名風格,在符合所在專案組或產品組的命名規則的前提下,才可使用。(即命名規則中沒有規定到的地方才可有個人命名風格)。

 

(4)對於變數命名,禁止取單個字元(如i 、j 、k... ),建議除了要有具體含義外,還能表明其變數型別、資料型別等,但i 、j 、k 作區域性迴圈變數是允許的。變數,尤其是區域性變數,如果用單個字元表示,很容易敲錯(如i寫成j),而編譯時又檢查不出來,有可能為了這個小小的錯誤而花費大量的查錯時間。

 

(5)除非必要,不要用數字或較奇怪的字元來定義識別符號。

 

(6)命名規範必須與所使用的系統風格保持一致,並在同一專案中統一。

 

(7)在同一軟體產品內,應規劃好介面部分識別符號(變數、結構、函式及常量)的命名,防止編譯、連結時產生衝突。對介面部分的識別符號應該有更嚴格限制,防止衝突。如可規定介面部分的變數與常量之前加上“模組”標識等。

 

(8)用正確的反義片語命名具有互斥意義的變數或函式等。

下面是一些在軟體中常用的反義片語。

 

 

 

示例:

 

 

(9)除了編譯開關/ 標頭檔案等特殊應用,應避免使用EXAMPLE_TEST 之類以下劃線開始和結尾的定義。

 

3 變數名的命名規則

 

(1)變數的命名規則要求用“匈牙利法則”。

即開頭字母用變數的型別,其餘部分用變數的英文意思、英文的縮寫、中文全拼或中文全拼的縮寫,要求單詞的第一個字母應大寫。

即: 變數名=變數型別+變數的英文意思(或英文縮寫、中文全拼、中文全拼縮寫)

對非通用的變數,在定義時加入註釋說明,變數定義儘量可能放在函式的開始處:

bool 用b開頭 b標誌暫存器

int 用i開頭 iCount

short int 用n開頭 nStepCount

long int 用l開頭 lSum

char 用c開頭 cCount

unsigned char 用by開頭

float 用f開頭 fAvg

double 用d開頭 dDeta

unsigned int(WORD) 用w開頭 wCount

unsigned long int(DWORD) 用dw開頭 dwBroad

字串 用s開頭 sFileName

用0結尾的字串 用sz開頭 szFileName

 

(2)指標變數命名的基本原則為:

對一重指標變數的基本原則為:“p”+變數型別字首+命名,如一個float*型應該表示為pfStat。對二重指標變數的基本規則為:“pp”+變數型別字首+命名。對三重指標變數的基本規則為:“ppp”+變數型別字首+命名。

 

(3)全域性變數用g_開頭,如一個全域性的長型變數定義為g_lFailCount。即:變數名=g_+變數型別+變數的英文意思(或縮寫)。此規則還可避免區域性變數和全域性變數同名而引起的問題。

 

(4)靜態變數用s_開頭,如一個靜態的指標變數定義為s_plPerv_Inst。即: 變數名=s_+變數型別+變數的英文意思(或縮寫)

 

(5)對列舉型別(enum)中的變數,要求用列舉變數或其縮寫做字首。並且要求用大寫。如:


 

 

(6)對struct、union變數的命名要求定義的型別用大寫。並要加上字首,其內部變數的命名規則與變數命名規則一致。

 

結構一般用S開頭,如:

 

 

 

聯合體一般用U開頭,如:

 

 

(7)對常量(包括錯誤的編碼)命名,要求常量名用大寫,常量名用英文表達其意思。當需要由多個單詞表示時,單詞與單詞之間必須採用連字元“_”連線。

如:#define CM_FILE_NOT_FOUND CMMAKEHR(0X20B) 其中CM表示類別。

 

(8)對const 的變數要求在變數的命名規則前加入c_。即:c_+變數命名規則;示例:const char* c_szFileName;

 

4 函式的命名規範

 

(1)函式的命名應該儘量用英文(或英文縮寫、中文全拼、中文全拼縮寫)表達出函式完成的功能——函式名應準確描述函式的功能。遵循動賓結構的命名法則,函式名中動詞在前,並在命名前加入函式的字首,函式名的長度不得少於8個字母。函式名首字大寫,若包含有兩個單詞的每個單詞首字母大寫。如果是OOP 方法,可以只有動詞(名詞是物件本身)。示例:


 

(2)避免使用無意義或含義不清的動詞為函式命名。如使用process、handle等為函式命名,因為這些動詞並沒有說明要具體做什麼。

 

(3)必須使用函式原型宣告。函式原型宣告包括:引用外來函式及內部函式,外部引用必須在右側註明函式來源: 模組名及檔名;內部函式,只要註釋其定義檔名——和呼叫者在同一檔案中(簡單程式)時不需要註釋。

應確保每個函式宣告中的引數的名稱、型別和定義中的名稱、型別一致。

 

5 函式引數命名規範

 

(1)引數名稱的命名參照變數命名規範。

(2)為了提高程式的執行效率,減少引數佔用的堆疊,傳遞大結構的引數,一律採用指標或引用方式傳遞。

(3)為了便於其他程式設計師識別某個指標引數是入口引數還是出口引數,同時便於編譯器檢查錯誤,應該在入口引數前加入const標誌。

如:……cmCopyString(const CHAR * c_szSource, CHAR * szDest)

 

6 檔名

 

(包括動態庫、元件、控制元件、工程檔案等)的命名規範檔案名的命名要求表達出檔案的內容,要求檔名的長度不得少於5個字母,嚴禁使用象file1,myfile之類的檔名。

 

轉載自  老九學堂