命名
命名,包括文件名、類名、結構名、類型名、函數名、變量名、參數名等都是程序設計中重要的一部分。一個好的名稱,體現了一個深思熟慮的過程,同時也 能夠幫助別人更好地理解開發者的思路。如果發現程序中,充滿了a, b, c, x, y, z, tmp這種命名的變量,這時候就需要仔細的考慮自己的實現是否有問題。
類(結構)名
- 類名必須是名詞,類名必須明確表示這個類代表了什麼。
- 如果類名超過3個單詞,說明這個類有可能需要拆分了。
- 不要把父類的名字帶到子類中。
- 類名加上後綴也是一種選擇。如下載代理類,可以寫爲DownloadProxy。
- 類名首字母大寫;用大寫字母分隔單詞,除單詞的首字母外,全部小寫;類名中不要出現下劃線“_”。
類(結構)屬性名
- 屬性由成員前綴”m_“屬性,屬性名採用匈牙利命名規範。
方法
- 方法與函數執行一個任務,因此應當用動詞來命名。比方說,DumpDataToFile()就要好於DataFile()。
- 方法名首字母大寫;用大寫字母分隔單詞,除單詞的首字母外,全部小寫,方法名中不要出現下劃線。
函數
- 方法與函數執行一個任務,因此應當用動詞來命名。
- 函數名全部小寫,單詞之間用下劃線分隔。
方法與函數參數名
- 首字母小寫。
- 除了第一個單詞,所有單詞的首字母大寫。
- 名稱中不應出現”_”。
類庫名
- 如果使用C書寫類庫,或在C++不使用namespace書寫類庫,爲了避免命名衝突,需要在類名,結構名,函數名前加上類庫名前綴。類庫名應當簡潔、明確。 如:
ImEgg* ImEgg_new();
變量名
- 變量名使用匈牙利命名規則。
- 全部小寫字母。
- 使用”_”作爲分隔符。
- 唯一能違反以上命名規則的,是一些循環中需要用到的自增變量。 如:
int fun(Point* pPoint) { Point* p_nest_point = pPoint; char* p = NULL; char sz_buf[255]; for (int i = 0; i < 50 && (sz_buf+p++) != ' '; i++) { // do stuff } }
p point b byte w word dw double word ch char wch wide char n number sz char[] f bool fn function pointer v void lpsz char* terminated by zero
指針變量
- 指針變量應在類型前加上p前綴,其後變量名命名規則不變。
- *號永遠靠近類型,一行聲明中只出現一個指針變量。 如:
Point* p_point;
引用變量
- 引用變量應在類型前加上r前綴,其後變量名命名規則不變。
全局變量
- 全用變量應使用g_屬性描述,其後變量名命名規則不變。 如:
ImLog4c* g_pLogger;
靜態變量
- 靜態變量應使用s_屬性描述,其後變量名命名規則不變。
ImLog4c* s_pLogger;
枚舉類型
- 枚舉類型命名規則使用大寫字母,用下劃線分隔單詞。
Enum PIN { PIN_ON = 1; PIN_OFF; };
宏
- 宏命名規則使用大寫字母,用下劃線分隔單詞。
#define MAX_LENGTH 50 #define MAX(a, b) (a)>(b)?(a):(b)
集合名稱
- 集合名稱使用複數,其它與變量名規範相同。
GList* edges = g_list_new(); vector<Edge> edges; typedef vector<Edge> EdgeVector; typedef map<string, EdgeVector> EdgeMap; typedef list<EdgeMap> EdgeList;
格式
{}規則
- “{“與”}”單獨佔一行。
- “{“與”}”與上一行行首對齊。
- If與while後哪怕只有一句話,也要加上“{“與”}”。
while (*(buf+p++) != ' ') printf("hello\n");
()規則
- "("與前一個關鍵字之間留一個空格。
- "("與前函數名之間不需要留一個空格。
- Return語句儘可能不要用"()"
return (a*b^2>100)?(a):(b);
縮進規則
- 縮進永遠爲4。
- 用空格代替tab。
- Tab永遠用4。
- 如果縮進超過5層,考慮代碼優化。
列長度
- 一列不應該超過80個英文字符。
- 一個聲明佔一行
- 一個聲明佔一行。
三元表達式
- 條件表達式佔一行
- then與else應單獨佔一行。
(condition) ? funct1() : func2(); Or (condition) ? long statement : another long statement;
頭文件順序
- 頭文件應當按照與功能的特點性從高到低排列。順序爲
- 當前目錄的頭文件。
- 自行開發庫的頭文件。
- 第三方庫的頭文件。
- 標準C++頭文件。
- 標準C頭文件。
空格
- 操作符需要加上空格。
- 關鍵字前後要加上空格。
- 逗號後要加上空格。
- 冒號後要加上空格。
- 在一行內的分號後要加上空格,行末的分號不要空格。
fun(a, b); for (int I = 0; I < 50; i++);
類與結構
類文件與結構文件命名
- 公有類,C中用以模擬類的結構,需要位於一個獨立的文件中。
- 文件名與公有類名,C中用以模擬類的結構名相同。
類與結構頭文件佈局
- 文件描述,使用Doxygen語法。
- 頭文件保護宏。
- 頭文件。
- 類或結構描述,使用Doxygen語法。
- 類或結構名。
- 屬性描述,使用Doxygen語法。以下每個屬性或方法都要求對應一個描述。
- 屬性聲明。
- C++與身命週期相關函數聲明。C++中的構造方法,析構方法以及工廠方法。
- C++操作符重載。
- C++訪問器,get與set方法。