C語言編程規範—命名規則

轉載自:http://www.cnblogs.com/wfwenchao/p/5209197.htmlhtml

C是一門樸素的語言,你使用的命名也應該這樣。與Modula-2和Pascal程序員不一樣,C程序員不使用諸如「ThisVariableIsATemporaryCounter」這樣「聰明」的名字。C程序員應該叫它「tmp」,這寫起來更簡單,也不會更難懂。
然而,當面對複雜狀況時就有些棘手,給全局變量取一個描述性的名字是必要的。把一個全局函數叫作「foo」是一種目光短淺的行爲。全局函數也同樣,若是你有一個統計當前用戶個數的函數,應當把它命名爲「count_active_user()」或者簡單點些的相似名稱,不該該命名爲「cntusr()」。
3.1 三種流行的命名法則程序員

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

(1)駝峯命令法。正如它的名稱所表示的那樣,是指混合使用大小寫字母來構成變量和函數的名字。例如,下面是分別用駱駝式命名法和下劃線法命名的同一個函數:
printEmployeePaychecks();
print_employee_paychecks();ide

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

駝峯命名法近年來愈來愈流行了,在許多新的函數庫和Microsoft Windows這樣的環境中,它使用得當相多。另外一方面,下劃線法是C出現後開始流行起來的,在許多舊的程序和UNIX這樣的環境中,它的使用很是廣泛。編碼

(2)匈牙利命名法。普遍應用於象Microsoft Windows這樣的環境中。Windows 編程中用到的變量(還包括宏)的命名規則爲匈牙利命名法,這種命名技術是由一位能幹的 Microsoft 程序員查爾斯-西蒙尼(Charles Simonyi) 提出的。指針

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

例如:m_lpszStr, 表示指向一個以0字符結尾的字符串的長指針成員變量。
匈牙利命名法關鍵是:標識符的名字以一個或者多個小寫字母開頭做爲前綴;前綴以後的是首字母大寫的一個單詞或多個單詞組合,該單詞要指明變量的用途。對象

(3)帕斯卡(pascal)命名法。與駝峯命名法相似,兩者的區別在於:駝峯命名法是首字母小寫,而帕斯卡命名法是首字母大寫,如:
DisplayInfo();
string UserName;
兩者都是採用了帕斯卡命名法。blog

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

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

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

(3)本身特有的命名風格,要自始至終保持一致,不可來回變化。我的的命名風格,在符合所在項目組或產品組的命名規則的前提下,纔可以使用。(即命名規則中沒有規定到的地方纔可有我的命名風格)。

(4)對於變量命名,禁止取單個字符(如i 、j 、k... ),建議除了要有具體含義外,還能代表其變量類型、數據類型等,但i 、j 、k 做局部循環變量是容許的。變量,尤爲是局部變量,若是用單個字符表示,很容易敲錯(如i寫成j),而編譯時又檢查不出來,有可能爲了這個小小的錯誤而花費大量的查錯時間。

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

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

(7)在同一軟件產品內,應規劃好接口部分標識符(變量、結構、函數及常量)的命名,防止編譯、連接時產生衝突。對接口部分的標識符應該有更嚴格限制,防止衝突。如可規定接口部分的變量與常量以前加上「模塊」標識等。

(8)用正確的反義詞組命名具備互斥意義的變量或相反動做的函數等。
下面是一些在軟件中經常使用的反義詞組。
add / remove begin / end create / destroy
insert / delete first / last g et / release
increment / decrement put / get
add / delete lock / unlock open / close
min / max old / new start / stop
next / previous source / target show / hide
send / receive source / destination
cut / paste up / down

示例:
int min_sum;
int max_sum;
int add_user( BYTE user_name );
int delete_user( BYTE
user_name );

(9)除了編譯開關/ 頭文件等特殊應用,應避免使用_EXAMPLE_TEST_ 之類如下劃線開始和結尾的定義。
3.3 變量名的命名規則

(1)變量的命名規則要求用「匈牙利法則」。
即開頭字母用變量的類型,其他部分用變量的英文意思、英文的縮寫、中文全拼或中文全拼的縮寫,要求單詞的第一個字母應大寫。
即: 變量名=變量類型+變量的英文意思(或英文縮寫、中文全拼、中文全拼縮寫)
對非通用的變量,在定義時加入註釋說明,變量定義儘可能可能放在函數的開始處。
見下表:
bool 用b開頭 bFlg
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)中的變量,要求用枚舉變量或其縮寫作前綴。而且要求用大寫。如:
enum cmEMDAYS
{
EMDAYS_MONDAY;
EMDAYS_TUESDAY;
……
};

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

結構通常用S開頭,如:
struct ScmNPoint
{
int nX;//點的X位置
int nY; //點的Y位置
};

聯合體通常用U開頭,如:
union UcmLPoint
{
LONG lX;
LONG lY;
}

(7)對常量(包括錯誤的編碼)命名,要求常量名用大寫,常量名用英文表達其意思。當須要由多個單詞表示時,單詞與單詞之間必須採用連字符「_」鏈接。
如:#define CM_FILE_NOT_FOUND CMMAKEHR(0X20B) 其中CM表示類別。

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

(1)函數的命名應該儘可能用英文(或英文縮寫、中文全拼、中文全拼縮寫)表達出函數完成的功能——函數名應準確描述函數的功能。遵循動賓結構的命名法則,函數名中動詞在前,並在命名前加入函數的前綴,函數名的長度不得少於8個字母。函數名首字大寫,若包含有兩個單詞的每一個單詞首字母大寫。若是是OOP 方法,能夠只有動詞(名詞是對象自己)。示例:
LONG GetDeviceCount(……);
void print_record( unsigned int rec_ind ) ;
int input_record( void ) ;
unsigned char get_current_color( void ) ;

(2)避免使用無心義或含義不清的動詞爲函數命名。如使用process、handle等爲函數命名,由於這些動詞並無說明要具體作什麼。

(3)必須使用函數原型聲明。函數原型聲明包括:引用外來函數及內部函數,外部引用必須在右側註明函數來源: 模塊名及文件名;內部函數,只要註釋其定義文件名——和調用者在同一文件中(簡單程序)時不須要註釋。
應確保每一個函數聲明中的參數的名稱、類型和定義中的名稱、類型一致。
3.5 函數參數命名規範

(1)參數名稱的命名參照變量命名規範。
(2)爲了提升程序的運行效率,減小參數佔用的堆棧,傳遞大結構的參數,一概採用指針或引用方式傳遞。
(3)爲了便於其餘程序員識別某個指針參數是入口參數仍是出口參數,同時便於編譯器檢查錯誤,應該在入口參數前加入const標誌。
如:……cmCopyString(const CHAR * c_szSource, CHAR * szDest)
3.6 文件名(包括動態庫、組件、控件、工程文件等)的命名規範

文件名的命名要求表達出文件的內容,要求文件名的長度不得少於5個字母,嚴禁使用象file1,myfile之類的文件名。

相關文章
相關標籤/搜索