設計筆記——命名規則

設計筆記——命名規則

來源:http://jx-kingwei.spaces.live.com/blog/cns!F7A152EB74B9576E!1495.entry

 

 

“C是一門樸素的語言,你使用的命名也應該這樣。”
—— 《Linux kernel coding style》

顧名思義,“命名規則”指的是爲標識符起名字時遵循的規則。
標識符主要包括變量名、函數名和宏名。


1 常見命名規則

比較著名的命名規則首推匈牙利命名法,
這種命名方法是由Microsoft程序員查爾斯·西蒙尼(Charles Simonyi) 提出的。
其主要思想是“在變量和函數名中加入前綴以增進人們對程序的理解”。
匈牙利命名法關鍵是:標識符的名字以一個或者多個小寫字母開頭作爲前綴;
前綴之後的是首字母大寫的一個單詞或多個單詞組合,該單詞要指明變量的用途。
例如:lpszStr, 表示指向一個以'/0'結尾的字符串(sz)的長指針(lp)變量。

駱駝(Camel)命名法近年來越來越流行,
在許多新的函數庫和Java這樣的平臺下使用得當相多。
駱駝命名法,正如它的名稱所表示的那樣,指的是混合使用大小寫字母來構成標識符的名字。
其中第一個單詞首字母小寫,餘下的單詞首字母大寫。
例如:printEmployeePaychecks(),函數名中每一個邏輯斷點都有一個大寫字母來標記。

帕斯卡(Pascal)命名法與駱駝命名法類似。
只不過駱駝命名法是第一個單詞首字母小寫,而帕斯卡命名法則是第一個單詞首字母大寫。
例如:DisplayInfo()和UserName都是採用了帕斯卡命名法。

在C#中,以帕斯卡命名法和駱駝命名法居多。
事實上,很多程序設計者在實際命名時會將駱駝命名法和帕斯卡結合使用,
例如變量名採用駱駝命名法,而函數採用帕斯卡命名法。

另一種流行的命名規則稱爲下劃線命名法。
下劃線法是隨着C語言的出現流行起來的,在UNIX/LIUNX這樣的環境,以及GNU代碼中使用非常普遍。

本章所述的命名規則主要基於下劃線命名法發展而來。


2 函數的命名

函數名使用下劃線分割小寫字母的方式命名:

設備名_操作名()

操作名一般採用:謂語(此時設備名作爲賓語或者標明操作所屬的模塊)或者
謂語+賓語/表語(此時設備名作爲主語或者標明操作所屬的模塊) 等形式,如:

tic_init()
adc_is_busy()
uart_tx_char()

中斷函數的命名直接使用 設備名_isr() 的形式命名,如:
timer2_isr()


3 變量的命名

變量的命名也採用下劃線分割小寫字母的方式命名。
命名應當準確,不引起歧義,且長度適中。如:
int length;
uint32 test_offset;

單字符的名字也是常用的,如i, j, k等,它們通常可用作函數內的局部變量。

tmp常用做臨時變量名。

局部靜態變量,應加s_詞冠(表示static),如:
static int s_lastw;

全局變量(尤其是供外部訪問的全局變量),應加g_詞冠(表示global),如:
void (* g_capture_hook)(void);


4 常量及宏的命名

採用下劃線分割大寫字母的方式命名,一般應以設備名作爲前綴,
防止模塊間命名的重複。如:

#define TIMER0_MODE_RELOAD        2
#define TIMER2_COUNT_RETRIEVE(val)    ((uint16)(65536 - (val)))

當然,看作接口的宏可以按照函數的命名方法命名,例如:

#define timer2_clear()        (TF2 = 0)
#define timer0_is_expired()    (TF0)


5 常用縮寫詞

原詞        縮寫

addition    add
answer        ans
array        arr
average        avg
buffer        buf或buff
capture        cap或capt
check        chk
count        cnt
column        col
control        ctrl
decode        dec
define        def
delete        del
destination    dst或dest
display        disp
division    div
encode        enc
environment    env
error        err
float        flt
frequency    freq
header        hdr
index        idx
image        img
increment    inc
initalize    init
iteration    itr
length        len
memory        mem
middle        mid
make        mk
message        msg
multiplication    mul
number        num
operand        opnd
optimization    opt
operator    optr
packet        pkt
positon        pos
previous    pre或prev
payload type    pt
pointer        ptr
return code    rc
record        rcd
receive        recv
result        res
return        ret
source        src
stack        stk
string        str
subtraction    sub
table        tab
temporary    tmp或temp
total        tot
time stamp    ts
value        val



6 結語

沒有一種命名規則可以讓所有的程序員贊同。而這多種命名規則也確實各有利弊。

沒有必要花太多的精力試圖發明最好的命名規則,
而是應當制定一種令大多數項目成員滿意的命名規則並切實執行。
標識符命名的一致性自然會體現出代碼的優雅。

當然,如果你的程序使用了第三方的代碼,而這些模塊經驗證確實是正確無誤的。
那麼也沒有必要一味追求命名的一致性,而去修改這些已經定型的模塊中的函數和變量名。


參考文獻:

[1] 高質量程序設計指南——C/C++語言,林銳
[2] Linux kernel coding style,Linus Torvalds
[3] GNU Coding Standards,Richard Stallman
 
*************** 重量級資料下載 ************
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章