前言
這篇重點介紹一下代碼編程的命名規范,主要是業界流行的命名法則和標識符命名規范
標識符的命名規則歷來是一個敏感話題,典型的命名風格如unix風格、windows風格等,從來無法達成共識。實際上,各種風格都有其優勢也有其劣勢,而且往往和個人的審美觀有關。對標識符定義主要是為了讓團隊的代碼看起來盡可能統一,有利于代碼的后續閱讀和修改。
命名完全體現了程序的可閱讀性和可理解性,在一定程度上是不需要寫注釋也能看懂代碼。
命名法則介紹
目前,業界共有四種命名法則:駝峰命名法、匈牙利命名法、帕斯卡命名法和下劃線命名法,其中前三種是較為流行的命名法。
1printEmployeePaychecks// 駝峰命名法
2
3print_employee_paychecks//下劃線命名法
4
5PrintEmployeePaychecks// 帕斯卡命名法
其中,駝峰命名法和帕斯卡命名法類似,但是區別在第一個字母是否大小寫,因此駝峰命名法一般稱小駝峰命名法,帕斯卡命名法稱大駝峰命名法。
駝峰命名法
正如它的名稱所表示的那樣,是指混合使用大小寫字母來構成變量和函數的名字(這樣的變量名看上去就像駱駝峰一樣此起彼伏,故得名),又叫小駝峰命名法。
當變量名或函數名是由一個或多個單詞連結在一起,而構成的唯一識別字時,第一個單詞以小寫字母開始;從第二個單詞開始以后的每個單詞的首字母都采用大寫字母。
1printEmployeePaychecks
匈牙利命名法
通過在變量名前面加上相應的小寫字母的符號標識作為前綴,標識出變量的作用域、類型等。這些符號可以多個同時使用,順序是先m_(成員變量)、再指針、再簡單數據類型、再其它。這樣做的好處在于能增加程序的可讀性,便于對程序的理解和維護
匈牙利命名法的規則是:作用域(屬性)+類型+描述。
如:定義一個全局變量,指向類型為int的最小值指針,變量命名為
int g_pMinValue = NULL;
以下是我根據匈牙利命名法總結的的寫法對應表
分類 | 前綴 | 描述 |
---|---|---|
作用域(屬性) | 無 | 局部變量 |
m_ | 類成員變量(C++) | |
ms_ | 類的靜態成員變量(C++) | |
s_ | 靜態變量 | |
g_ | 全局變量 | |
sg_ | 靜態全局變量 | |
c | 常量 | |
類型 | b | bool 變量,不過我一般是用 is,如定義一個數據接收完成標志,則 bool isRecvEnd; |
sz | 以 '\\0' 結束的字符串 | |
str | string 類型字符串(C++) | |
p | 指針變量 | |
uc | 無符號單字節整數型(unsigned char) | |
us | 無符號雙字節整數型(unsigned short) | |
ui | 無符號四字節整數型(unsigned int) | |
c | 有符號單字節整數型(signed char) | |
s | 有符號雙字節整數型(signed short) | |
i | 有符號四字節整數型(signed int) | |
arr | 數組 | |
l | 長整型 | |
f | 浮點型變量 | |
pfn | 函數指針 | |
t | 結構體變量 | |
e | 枚舉變量 | |
類型前綴可以組合使用,例如"arrc"表示字符數組,"psz"表示指向以'\\0' 結束的字符串的指針等等 |
有看過我代碼的朋友可能就會有疑問了,為什么我寫的代碼中關于變量的定義,特別是整數型的變量沒有加前綴uc
us
ui
c
s
i
l
,而其它類型變量都會加上前綴,原因如下:
- 雖然這個一看名字就知道這個變量的類型定義和取值范圍,但是通常情況下變量定義后在后面的維護中可能為了增大或減少取值范圍,會改變類型的定義,但又不同時重命名變量,導致后來再看就會有異議
- 目前的大部分編程軟件將鼠標放置在變量上,通常就會提示該變量的類型定義,所以也不需要特意按照這個命名
- 大部分只有整數型的變量定義后才會因為取值范圍受限而改變類型定義,而其他類型的定義之后基本不會隨意變動
帕斯卡命名法
是指混合使用大小寫字母來構成變量和函數的名字,每個單詞的第一個字母都大寫,又叫大駝峰式命名法;
1PrintEmployeePaychecks
下劃線命名法
使用下劃線( )連接組成的標識符,即 單詞(字母或數字) 單詞(字母或數字)_單詞(字母或數字)
1print_employee_paychecks(); // 函數
2int min_value = 0; // 變量
標識符命名規范
根據不同場景使用不同命名規則,甚至組合使用,業內比較常用的方式。
文件名
駝峰命名法,有時也使用下劃線命名法,根據不同情況使用,盡量和之前的保持一致
因為不同系統對文件名大小寫處理會有所不同(如Windows系統不區分大小寫,但是Linux系統則區分)
變量名
匈牙利命名法 + (小)駝峰命名法兩種結合使用
具體規則是:屬性+類型+描述( 駝峰命名法)
- 使用名詞或者形容詞 + 名詞方式命名變量(描述),如
char szFile[20] = "file";
int fileSize = 0;
- 禁止使用單字節命名變量,但允許定義
i
、j
、k
等作為局部循環變量
宏定義/枚舉
大寫 + 下劃線命名法
- 對于數值或者字符串等等常量或者枚舉的定義,全部采用全大寫字母,單詞之間加下劃線“_”的方式命名。如
#define MIN_VALUE 5
- 除了頭文件或編譯開關等特殊標識符定義,宏定義不能使用下劃線“_”開頭和結尾(一般來說,下劃線開頭或結尾的宏都是一些內部的定義)
函數名
帕斯卡命名法(大駝峰命名法),對于對外提供的接口函數,則加模塊前綴
- 以函數要執行的動作命名,一般采用動詞或者動詞+名詞的結構,且符合帕斯卡命名法
- 對于對外提供的接口函數,一般加上模塊前綴
LED_
,如LED_CtrlOff(…)
通用規則
除了上述規則外,關于以上標識符的命名還應該符合以下規則:
1、標識符的命名要清晰、明了,有明確的含義,同時使用完整的單詞或大家基本可以認同和理解的縮寫,避免讓人產生誤解
如:良好的命名:
int error_number;
不好的命名:int n, nerr;
2、標識符的長度應當符合“min-length && max-information”原則
如:幾十年前老ANSI C規定名字不準超過6個字符,現今的C++/C不再有此限制。一般來說,長名字能更好地表達含義,所以函數名、變量名、類名長達十幾個字符不足為怪。那么名字是否越長越好?不一定,例如變量名
maxval
就比maxValueUntilOverflow
好用
3、除了常見的通用縮寫外,不使用單詞縮寫,不得使用漢語拼音
較短的單詞可以通過去掉“元音”形成縮寫,較長的單詞可取單詞的頭幾個字母形成縮寫,一些單詞有大家公認的縮寫,常用單詞縮寫必須統一。協議中的單詞縮寫與協議保持一致,對于某個系統使用的專用縮寫應該在注釋或者某處做統一說明
4、用正確的反義詞組命名具有互斥意義的變量或相反動作的函數等
如:
add
/remove
,begin
/end
,creat
/destroy
等
5、盡量避免名字中出現數字編號,除非邏輯上的確需要編號
6、重構/修改部分代碼時,應保持和原有代碼風格保持一致
根據源代碼現有的風格繼續編寫代碼,有利于保持總體一致
-
WINDOWS
+關注
關注
3文章
3524瀏覽量
88422 -
UNIX
+關注
關注
0文章
296瀏覽量
41416 -
標識符
+關注
關注
0文章
12瀏覽量
7337
發布評論請先 登錄
相關推薦
評論