1、命名的兩個基本原則ide
一、含義清晰,不易混淆;函數
二、不和其它模塊、系統API的命名空間相沖突。spa
2、命名通則代碼規範
一、在全部命名中,都應使用標準的英文單詞或縮寫;不得使用拼音或拼音縮寫,除非該名字描述的是文對象
特有的內容(如半角、全角、聲母、韻母等);除非必要,不要用數字或較奇怪的字符來定義標識符。接口
二、全部命名都應遵循達意原則,即名稱應含義清晰、明確。作用域
三、全部命名都不易過長,應控制在規定的最大長度之內。rem
四、全部命名都應儘可能使用全稱。get
五、命名中若使用特殊約定或縮寫,則要有註釋說明。 產品
六、本身特有的命名風格,要自始至終保持一致,不可來回變化。
說明:我的的命名風格,在符合所在項目組或產品組的命名規則的前提下,纔可以使用。(即命名規則中沒有規定到的地方纔可有我的命名風格)。
七、在同一軟件產品內,應規劃好接口部分標識符(變量、結構、函數及常量)的命名,防止編譯、連接時產生衝突。
八、對於變量命名,禁止取單個字符(如i、j、k...),建議除了要有具體含義外,還能代表其變量類型、數據類型等,但i、j、k做局部循環變量是容許的。
說明:變量,尤爲是局部變量,若是用單個字符表示,很容易敲錯(如i寫成j),而編譯時又檢查不出來,有可能爲了這個小小的錯誤而花費大量的查錯時間。
例:下面所示的局部變量名的定義方法能夠借鑑。
int liv_Width
其變量名解釋以下:
l 局部變量(Local) (其它:g 全局變量(Global)...)
i 數據類型(Interger)
v 變量(Variable) (其它:c 常量(Const)...)
Width 變量含義
這樣能夠防止局部變量與全局變量重名。
九、命名規範必須與所使用的系統風格保持一致,並在同一項目中統一,好比採用UNIX的全小寫加下劃線的風格或大小寫混排的方式,不要使用大小寫與下劃線混排的 方式,用做特殊標識如標識成員變量或全局變量的m_和g_,其後加上大小寫混排的方式是容許的。
例: Add_User不容許,add_user、AddUser、m_AddUser容許。
十、用正確的反義詞組命名具備互斥意義的變量或相反動做的函數等。
說明:下面是一些在軟件中經常使用的反義詞組。
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 up / down cut / paste
例:
int min_sum;
int max_sum;
int add_user( BYTE *user_name );
int delete_user( BYTE *user_name );
十一、除了編譯開關/頭文件等特殊應用,應避免使用_EXAMPLE_TEST_之類如下劃線開始和結尾的定義。
十二、程序中不要出現標識符徹底相同的局部變量和全局變量,儘管二者的做用域不一樣而不會發生語法錯誤,但會令人誤解。
3、具體規範
一、工程名
不強制統一。
二、文件名:
基於工程名,開頭3個字母應代表與哪個工程相關。
後面的字母應可以區別不一樣的功能。
不區分大小寫。
長度不限於8.3格式,建議很少於30個字符。
若文件用於定義和實現類,建議文件名與類名保持一致。
三、函數名:
參照 Windows API 的命名規範。
推薦使用動賓結構。函數名應清晰反映函數的功能、用途。
函數名最長不得超過30個字符。
函數名第一個字母必須大寫。
全局函數必須以小寫前綴"g"開頭。全局函數的名字應當使用「動詞」或者「動詞+名詞」(動賓詞組)。類的成員函數應當只使用「動詞」,被省略掉的名詞就是對象 自己。
例:
DrawBox(); // 全局函數
box->Draw(); // 類的成員函數
四、變量名:
原則上,變量名的命名聽從匈牙利記法。即:前綴 + 類型 + 變量名
變量名最長不得超過20個字符。
變量的名字應當使用「名詞」或者「形容詞+名詞」。
例:
float value;
float oldValue;
1)格式:[m_|s_|g_] type [class name|struct name] variable name
2)解釋:
m_ : 類的成員變量
ms_:類的靜態成員變量
s_ :靜態全局變量
g_ :普通全局變量
類型縮寫(type)
char, TCHAR: ch
char[],TCHAR[]: sz
bool, BOOL: b
int, __int16,__int32,__int64: n
long: l
double: d
float: ft
BYTE: by
WORD: w
DWORD: dw
unsigned: u
function: fn
p :pointer
lp :pointer
五、類名:
必須以大寫"K"開頭,後面字母反映具體含義,以清晰表達類的用途和功能爲原則。
接口必須以大寫"I"開頭,表明 Interface 。
當名稱由多個單詞構成時,每個單詞的第一個字母必須大寫。
六、結構名、宏名、枚舉名、聯合名:
所有大寫。
枚舉名加小寫前綴"enum"。
例:
typedef enum _KFILE_OPEN_MODE
{
enumOPEN_READONLY = 0;
enumOPEN_READWRITE = 1;
enumCREATE_ALWAY = 3 ;
} KFILE_OPEN_MODE;
宏名加小寫前綴"def"。
例:
#define defMAXNUMBER 100
結構名加小寫前綴"tag",以後必須以大寫"K"開頭。
例:
typedef struct tagKPOINT
{
int x;
int y;
} KPOINT;
聯合名加小寫前綴"uni"。
例:
typedef union _VARIANT
{
char unichVal;
int uninVal;
long unilVal;
float uniftVal;
} VARIANT;
說明:對接口部分的標識符應該有更嚴格限制,防止衝突。如可規定接口部分的變量與常量以前加上 「模塊」標識等。
說明:應該在源文件的開始之處,對文件中所使用的縮寫或約定,特別是特殊的縮寫,進行必要的註釋說明。
說明:較短的單詞可經過去掉「元音」造成縮寫;較長的單詞可取單詞的頭幾個字母造成縮寫。
一些單詞有你們公認的縮寫。
例:temp 可縮寫爲 tmp
flag 可縮寫爲 flg
statistic 可縮寫爲 stat
increment 可縮寫爲 inc
message 可縮寫爲 msg