C語言命名規(guī)范
C是一門樸素的語言博脑,你使用的命名也應該這樣憎乙。
然而,當面對復雜情況時就有些棘手叉趣,給全局變量取一個描述性的名字是必要的泞边。把一個全局函數(shù)叫做“foo”是一種目光短淺的行為。全局函數(shù)也一樣疗杉,如果你有一個統(tǒng)計當前用戶個數(shù)的函數(shù)阵谚,應當把它命名為“count_active_user()”或者簡單點些的類似名稱,不應該命名為“cntusr()”烟具。
1 三種流行的命名法則
目前梢什,業(yè)界共有四種命名法則:駝峰命名法、匈牙利命名法朝聋、帕斯卡命名法和下劃線命名法嗡午,其中前三種是較為流行的命名法。
(1)駝峰命令法冀痕。正如它的名稱所表示的那樣荔睹,是指混合使用大小寫字母來構成變量和函數(shù)的名字,其實我們工作比較常用的就是駝峰命令法金度。例如应媚,下面是分別用駱駝式命名法和下劃線法命名的同一個函數(shù):
第一個函數(shù)名使用了駝峰命名法,函數(shù)名中的每一個邏輯斷點都有一個大寫字母來標記猜极。第二個函數(shù)名使用了下劃線法中姜,函數(shù)名中的每一個邏輯斷點都有一個下劃線來標記。
駝峰命名法近年來越來越流行了跟伏,在許多新的函數(shù)庫和Microsoft Windows這樣的環(huán)境中丢胚,它使用得當相多。另一方面受扳,下劃線法是C出現(xiàn)后開始流行起來的携龟,在許多舊的程序和UNIX這樣的環(huán)境中,它的使用非常普遍勘高。
(2)匈牙利命名法峡蟋。廣泛應用于象Microsoft Windows這樣的環(huán)境中坟桅。Windows 編程中用到的變量(還包括宏)的命名規(guī)則為匈牙利命名法,這種命名技術是由一位能干的 Microsoft 程序員查爾斯-西蒙尼(Charles Simonyi) 提出的蕊蝗。
匈牙利命名法通過在變量名前面加上相應的小寫字母的符號標識作為前綴仅乓,標識出變量的作用域、類型等蓬戚。這些符號可以多個同時使用夸楣,順序是先m_(成員變量)、再指針子漩、再簡單數(shù)據(jù)類型豫喧、再其它。這樣做的好處在于能增加程序的可讀性幢泼,便于對程序的理解和維護紧显。
例如:m_lpszStr, 表示指向一個以0字符結尾的字符串的長指針成員變量。
匈牙利命名法關鍵是:標識符的名字以一個或者多個小寫字母開頭作為前綴旭绒;前綴之后的是首字母大寫的一個單詞或多個單詞組合鸟妙,該單詞要指明變量的用途。
(3)帕斯卡(pascal)命名法挥吵。與駝峰命名法類似重父,二者的區(qū)別在于:駝峰命名法是首字母小寫,而帕斯卡命名法是首字母大寫忽匈,如:
二者都是采用了帕斯卡命名法房午。
(4)三種命名規(guī)則的小結:MyData就是一個帕斯卡命名的示例;MyData是一個駝峰命名法,它第一個單詞的第一個字母小寫,后面的單詞首字母大寫,看起來像一個駱駝丹允;iMyData是一個匈牙利命名法,它的小寫的i說明了它的型態(tài)郭厌,后面的和帕斯卡命名相同,指示了該變量的用途雕蔽。
2 命名的基本原則
(1)標識符的命名要清晰折柠、明了,有明確含義批狐,同時使用完整的單詞或大家基本可以理解的縮寫扇售,避免使人產(chǎn)生誤解——盡量采用采用英文單詞或全部中文全拼表示,若出現(xiàn)英文單詞和中文混合定義時嚣艇,使用連字符“_”將英文與中文割開承冰。較短的單詞可通過去掉“元音”形成縮寫;較長的單詞可取單詞的頭幾個字母形成縮寫食零;一些單詞有大家公認的縮寫困乒。例如:temp->tmp、flag->標志寄存器贰谣、statistic->stat娜搂、increment->inc迁霎、message->msg等縮寫能夠被大家基本認可。
(2)命名中若使用特殊約定或縮寫百宇,則要有注釋說明欧引。應該在源文件的開始之處,對文件中所使用的縮寫或約定恳谎,特別是特殊的縮寫,進行必要的注釋說明憋肖。
(3)自己特有的命名風格因痛,要自始至終保持一致,不可來回變化岸更。個人的命名風格鸵膏,在符合所在項目組或產(chǎn)品組的命名規(guī)則的前提下,才可使用怎炊。(即命名規(guī)則中沒有規(guī)定到的地方才可有個人命名風格)谭企。
(4)對于變量命名,禁止取單個字符(如i 评肆、j 债查、k... ),建議除了要有具體含義外瓜挽,還能表明其變量類型盹廷、數(shù)據(jù)類型等,但i 久橙、j 俄占、k 作局部循環(huán)變量是允許的。變量淆衷,尤其是局部變量缸榄,如果用單個字符表示,很容易敲錯(如i寫成j)祝拯,而編譯時又檢查不出來甚带,有可能為了這個小小的錯誤而花費大量的查錯時間。
(5)除非必要鹿驼,不要用數(shù)字或較奇怪的字符來定義標識符欲低。
(6)命名規(guī)范必須與所使用的系統(tǒng)風格保持一致,并在同一項目中統(tǒng)一畜晰。
(7)在同一軟件產(chǎn)品內(nèi)砾莱,應規(guī)劃好接口部分標識符(變量、結構凄鼻、函數(shù)及常量)的命名腊瑟,防止編譯聚假、鏈接時產(chǎn)生沖突。對接口部分的標識符應該有更嚴格限制闰非,防止沖突膘格。如可規(guī)定接口部分的變量與常量之前加上“模塊”標識等。
(8)用正確的反義詞組命名具有互斥意義的變量或函數(shù)等财松。
下面是一些在軟件中常用的反義詞組瘪贱。
\
示例:
(9)除了編譯開關/ 頭文件等特殊應用,應避免使用EXAMPLE_TEST 之類以下劃線開始和結尾的定義辆毡。
3 變量名的命名規(guī)則
(1)變量的命名規(guī)則要求用“匈牙利法則”菜秦。
即開頭字母用變量的類型,其余部分用變量的英文意思舶掖、英文的縮寫球昨、中文全拼或中文全拼的縮寫,要求單詞的第一個字母應大寫。
即:變量名=變量類型+變量的英文意思(或英文縮寫眨攘、中文全拼主慰、中文全拼縮寫)
對非通用的變量,在定義時加入注釋說明鲫售,變量定義盡量可能放在函數(shù)的開始處:
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。對二重指針變量的基本規(guī)則為:“pp”+變量類型前綴+命名龟虎。對三重指針變量的基本規(guī)則為:“ppp”+變量類型前綴+命名璃谨。
(3)全局變量用g_開頭,如一個全局的長型變量定義為g_lFailCount。即:變量名=g_+變量類型+變量的英文意思(或縮寫)鲤妥。此規(guī)則還可避免局部變量和全局變量同名而引起的問題佳吞。
(4)靜態(tài)變量用s_開頭,如一個靜態(tài)的指針變量定義為s_plPerv_Inst。即:變量名=s_+變量類型+變量的英文意思(或縮寫)
(5)對枚舉類型(enum)中的變量棉安,要求用枚舉變量或其縮寫做前綴底扳。并且要求用大寫。如:
(6)對struct贡耽、union變量的命名要求定義的類型用大寫衷模。并要加上前綴,其內(nèi)部變量的命名規(guī)則與變量命名規(guī)則一致蒲赂。
結構一般用S開頭阱冶,如:
聯(lián)合體一般用U開頭,如:
(7)對常量(包括錯誤的編碼)命名滥嘴,要求常量名用大寫木蹬,常量名用英文表達其意思。當需要由多個單詞表示時若皱,單詞與單詞之間必須采用連字符“_”連接镊叁。
如:#define CM_FILE_NOT_FOUND CMMAKEHR(0X20B) 其中CM表示類別尘颓。
(8)對const 的變量要求在變量的命名規(guī)則前加入c_。即:c_+變量命名規(guī)則晦譬;示例:const char* c_szFileName;
4 函數(shù)的命名規(guī)范
(1)函數(shù)的命名應該盡量用英文(或英文縮寫疤苹、中文全拼、中文全拼縮寫)表達出函數(shù)完成的功能——函數(shù)名應準確描述函數(shù)的功能敛腌。遵循動賓結構的命名法則卧土,函數(shù)名中動詞在前,并在命名前加入函數(shù)的前綴,函數(shù)名的長度不得少于8個字母像樊。函數(shù)名首字大寫夸溶,若包含有兩個單詞的每個單詞首字母大寫。如果是OOP 方法凶硅,可以只有動詞(名詞是對象本身)。示例:
(2)避免使用無意義或含義不清的動詞為函數(shù)命名扫皱。如使用process足绅、handle等為函數(shù)命名,因為這些動詞并沒有說明要具體做什么韩脑。
(3)必須使用函數(shù)原型聲明氢妈。函數(shù)原型聲明包括:引用外來函數(shù)及內(nèi)部函數(shù),外部引用必須在右側注明函數(shù)來源:模塊名及文件名段多;內(nèi)部函數(shù)首量,只要注釋其定義文件名——和調用者在同一文件中(簡單程序)時不需要注釋。
應確保每個函數(shù)聲明中的參數(shù)的名稱进苍、類型和定義中的名稱加缘、類型一致。
5 函數(shù)參數(shù)命名規(guī)范
(1)參數(shù)名稱的命名參照變量命名規(guī)范觉啊。
(2)為了提高程序的運行效率拣宏,減少參數(shù)占用的堆棧,傳遞大結構的參數(shù)杠人,一律采用指針或引用方式傳遞勋乾。
(3)為了便于其他程序員識別某個指針參數(shù)是入口參數(shù)還是出口參數(shù),同時便于編譯器檢查錯誤嗡善,應該在入口參數(shù)前加入const標志辑莫。
如:……cmCopyString(const CHAR * c_szSource, CHAR * szDest)
6 文件名
(包括動態(tài)庫、組件罩引、控件各吨、工程文件等)的命名規(guī)范文件名的命名要求表達出文件的內(nèi)容,要求文件名的長度不得少于5個字母蜒程,嚴禁使用象file1,myfile之類的文件名绅你。
老九學堂出品伺帘,轉載請私信哦
對于文章內(nèi)容有不理解的可以添加老九君個人QQ:614940318,請備注來自簡書
老九學堂免費C忌锯、C++伪嫁、Java課程地址:
https://study.163.com/courses-search?keyword=%E8%80%81%E4%B9%9D%E5%AD%A6%E5%A0%82