C語言的藝術之——標識符命令與定義

好記性不如爛筆頭o(^▽^)o

系列的文章:
《C語言的藝術之——頭文件》
《C語言的藝術之——函數》
《C語言的藝術之——標識符命令與定義》
《C語言的藝術之——變量》
C語言的藝術之——註釋
C語言的藝術之——排版與格式
C語言的藝術之——安全性

標識符命令與定義

目前比較使用的如下幾種命名風格:
unix like風格:單詞用小寫字母,每個單詞直接用下劃線‘_’分割,例如text_mutex,
Windows風格:大小寫字母混用,單詞連在一起,每個單詞首字母大寫。不過Windows風格如果遇到大寫專有用語時會有些彆扭,例如命名一個讀取RFC文本的函數,命令爲ReadRFCText,看起來就沒有unix like的read_rfc_text清晰了。
匈牙利命名法是計算機程序設計中的一種命名規則,用這種方法命名的變量顯示了其數據類型。匈牙利命名主要包括三個部分:基本類型、一個或更多的前綴、一個限定詞。
注意,不要使用匈牙利命名法

1、標識符的命名要清晰、明瞭,有明確含義,同時使用完整的單詞或大家基本可以理解的縮寫,避免使人產生誤解

說明:儘可能給出描述性名稱,不要節約空間,讓別人很快理解你的代碼更重要。

示例:好的命名:

int error_number; 
int number_of_completed_connection; 

不好的命名:使用模糊的縮寫或隨意的字符:

int n; 
int nerr; 
int n_comp_conns; 

2、除了常見的通用縮寫以外,不使用單詞縮寫,不得使用漢語拼音

說明:較短的單詞可通過去掉“元音”形成縮寫,較長的單詞可取單詞的頭幾個字母形成縮寫,一些單詞有大家公認的縮寫,常用單詞的縮寫必須統一。協議中的單詞的縮寫與協議保持一致。對於某個系統使用的專用縮寫應該在注視或者某處做統一說明。

示例:一些常見可以縮寫的例子:

argument 可縮寫爲 arg
buffer 可縮寫爲 buff
clock 可縮寫爲 clk
command 可縮寫爲 cmd
compare 可縮寫爲 cmp
configuration 可縮寫爲 cfg
device 可縮寫爲 dev
error 可縮寫爲 err
hexadecimal 可縮寫爲 hex
increment 可縮寫爲 inc、
initialize 可縮寫爲 init
maximum 可縮寫爲 max
message 可縮寫爲 msg
minimum 可縮寫爲 min
parameter 可縮寫爲 para
previous 可縮寫爲 prev
register 可縮寫爲 reg
semaphore 可縮寫爲 sem
statistic 可縮寫爲 stat
synchronize 可縮寫爲 sync
temp 可縮寫爲 tmp

3、產品/項目組內部應保持統一的命名風格

說明:Unix like和windows like風格均有其擁躉,產品應根據自己的部署平臺,選擇其中一種,並在產品內部保持一致。

例外:即使產品之前使用匈牙利命名法,新代碼也不應當使用。

4、用正確的反義詞組命名具有互斥意義的變量或相反動作的函數等

示例:

add/remove              begin/end               create/destroy
insert/delete           first/last              get/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      copy/paste              up/down

5、儘量避免名字中出現數字編號,除非邏輯上的確需要編號

示例:如下命名,使人產生疑惑。

#define EXAMPLE_0_TEST_
#define EXAMPLE_1_TEST_

應改爲有意義的單詞命名

#define EXAMPLE_UNIT_TEST_
#define EXAMPLE_ASSERT_TEST_

6、標識符前不應添加模塊、項目、產品、部門的名稱作爲前綴

說明:很多已有代碼中已經習慣在文件名中增加模塊名,這種寫法類似匈牙利命名法,導致文件名不可讀,並且帶來帶來如下問題:
1 第一眼看到的是模塊名,而不是真正的文件功能,阻礙閱讀;
2 文件名太長;
3 文件名和模塊綁定,不利於維護和移植。若foo.c進行重構後,從a模塊挪到b模塊,若foo.c中有模塊名,則需要將文件名從a_module_foo.c改爲b_module_foo.c

7、命名規範

7.1 文件命名統一採用小寫字符

說明:因爲不同系統對文件名大小寫處理會不同(如MS的DOS、Windows系統不區分大小寫,但是Linux系統則區分),所以代碼文件命名建議統一採用全小寫字母命名。

7.2 全局變量應增加“g_”前綴

7.3 靜態變量應增加“s_”前綴

說明:增加g_前綴或者s_前綴,原因如下:
首先,全局變量十分危險,通過前綴使得全局變量更加醒目,促使開發人員對這些變量的使用更加小心。
其次,從根本上說,應當儘量不使用全局變量,增加g_和s_前綴,會使得全局變量的名字顯得很醜陋,從而促使開發人員儘量少使用全局變量。

7.4 禁止使用單字節命名變量,但允許定義i、j、k作爲局部循環變量

7.5 不建議使用匈牙利命名法。

7.6 函數命名應以函數要執行的動作命名,一般採用動詞或者動詞+名詞的結構。

7.7 對於數值或者字符串等等常量的定義,建議採用全大寫字母,單詞之間加下劃線‘_’的方式命名(枚舉同樣建議使用此方式定義)。

示例:

#define PI_ROUNDED 3.14

7.8 除了頭文件或編譯開關等特殊標識定義,宏定義不能使用下劃線‘_’開頭和結尾。

說明:一般來說,’_’開頭、結尾的宏都是一些內部的定義,ISO/IEC 9899(俗稱C99)中有如下的描述(6.10.8 Predefined macro names):

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章