程序段號怎樣命名的?
正確并形象地給函數、變量命名,不僅可以增加程序的可讀性,也是程序員編程風格的一種反映。較好的命名習慣,可以有效的提高程序的可維護性。以下介紹幾種常用的變量命名規則。
一、匈牙利命名法:廣泛應用于Microsoft Windows這類環境中。
這種命名技術是由一位能干的 Microsoft 程序員查爾斯·西蒙尼(Charles Simonyi) 提出的。匈牙利命名法通過在變量名前面加上相應的小寫字母的符號標識作為前綴,標識出變量的作用域,類型等。這些符號可以多個同時使用,順序是先m_(成員變 量),再指針,再簡單數據類型,再其他。例如:m_lpszStr, 表示指向一個以0字符結尾的字符串的長指針成員變量。
匈牙利命名法關鍵是:標識符的名字以一個或者多個小寫字母開頭作為前綴;前綴之后的是首字母大寫的一個單詞或多個單詞組合,該單詞要指明變量的用途。
例如:bEnable, nLength, hWnd。
匈牙利命名法中常用的小寫字母的前綴:
前綴類型描述
aArray數組
bBOOL布爾
byBYTE無符號字符
cchar字符
cbCount of bytes字節數
crColor reference value顏色值
cx,cyCount of x,y(short)長度
dwDWORD雙字(無符號長整形)
fFlags標志
fnFunction函數
g_Global全局的
hHANDLE句柄
iInteger(int)整數
llong(long)長整數
lpLong point長指針
m_Data member of a class類的數據成員
nShort(short)短整型
npNear point短指針
pPoint指針
sString字符串
szZero terminated string以0結尾的字符串
tmText metric文本規則
uUnsigned int無符號整數
ulUnsigned long(ULONG)無符號長整數
wWORD無符號短整數
x,yx,y coordinates(short)坐標
vvoid空
有關項目的全局變量用g_開始,類成員變量用m_。
前綴類型例子
C類CDocument, CPrintInfo
m_成員變量m_pDoc, m_nCustomers
g_全局變量g_Servers
二、駝峰命名法:近年來越來越流行。
駝峰命名法,正如它的名稱所表示的那樣,指的是混合使用大小寫字母來構成標識符的名字。其中第一個單詞首字母小寫,余下的單詞首字母大寫。
例如:
printEmployeePaychecks();
函數名中每一個邏輯斷點都有一個大寫字母來標記。
三、帕斯卡(Pascal)命名法:與駝峰命名法類似。
只不過駝峰命名法是第一個單詞首字母小寫,而帕斯卡命名法則是第一個單詞首字母大寫。因此這種命名法也有人稱之為“大駝峰命名法”。
例如:
DisplayInfo();
UserName
都是采用了帕斯卡命名法。
在C#中,以帕斯卡命名法和駱駝命名法居多。
事實上,很多程序設計者在實際命名時會將駝峰命名法和帕斯卡結合使用,例如變量名采用駝峰命名法,而函數采用帕斯卡命名法。
四、下劃線命名法。
下劃線法是隨著C語言的出現流行起來的,在UNIX/LIUNX這樣的環境,以及GNU代碼中使用非常普遍。
4.1 函數的命名
函數名使用下劃線分割小寫字母的方式命名:
設備名_操作名();
操作名一般采用:謂語(此時設備名作為賓語或者標明操作所屬的模塊)或者謂語+賓語/表語(此時設備名作為主語或者標明操作所屬的模塊) 等形式,如:
tic_init();
adc_is_busy();
uart_tx_char();
中斷函數的命名直接使用 設備名_isr() 的形式命名,如:
timer2_isr();
4.2 變量的命名
變量的命名也采用下劃線分割小寫字母的方式命名。命名應當準確,不引起歧義,且長度適中。如:
int length;
uint32 test_offset;
單字符的名字也是常用的,如i, j, k等,它們通常可用作函數內的局部變量。tmp常用做臨時變量名。
局部靜態變量,應加s_詞冠(表示static),如:
static int s_lastw;
全局變量(尤其是供外部訪問的全局變量),應加g_詞冠(表示global),如:
void (* g_capture_hook)(void);
4.3 常量及宏的命名
采用下劃線分割大寫字母的方式命名,一般應以設備名作為前綴,
防止模塊間命名的重復。如:
#define TIMER0_MODE_RELOAD 2
#define TIMER2_COUNT_RETRIEVE(val) ((uint16)(65536 - (val)))
當然,看作接口的宏可以按照函數的命名方法命名,例如:
#define timer2_clear() (TF2 = 0)
#define timer0_is_expired() (TF0)
據考察,沒有一種命名規則可以讓所有的程序員贊同,程序設計教科書一般都不指定命名規則。命名規則對軟件產品而言并不是“成敗悠關”的事,我們不要化太多精力試圖發明世界上最好的命名規則,而應當制定一種令大多數項目成員滿意的命名規則,并在項目中貫徹實施。