前言:
經過老師評論做出修改,相比於之前簡略的代碼規范,這次花時間專門了解學習了一下其他大公司/開發者的代碼規范,規范更完善了一些;
代碼風格:
-
庫的使用:
盡量不要引用不必要的庫,包括不必要的頭文件,或引用不必要的程序集。注重細節能夠減少生成時間,最小化出錯幾率,並給讀者一個良好的印象。
-
縮進:
縮進使用4個空格的方式。
-
全局變量:
盡量減少使用全局變量。為了正確的使用全局變量,一般是將他們作為參數傳入函數。不要在函數或類內部直接引用全局變量,因為這會引起一個副作用:在調用者不知情的情況下改變了全局變量的狀態。這對於靜態變量同樣適用。如果需要修改全局變量,應該將其作為一個輸出參數,或返回其一份全局變量的拷貝。
-
變量的聲明和初始化:
在最小的,包含該局部變量的作用域塊內聲明它。一般若語言允許,就僅在使用前聲明它們,否則就在作用域塊的頂端聲明,並一定在聲明變量的時候初始化它們,並盡量在聲明和初始化或賦值置於同一行代碼內。
-
括號:
在復雜的條件表達式中,用括號清楚的表示邏輯優先級。
-
斷行與空白的{ }行與分行:
在定義不同變量或對多個變量進行賦值時不要放在一行上,即多條語句不要放在一行上。程序結構風格使用斷行和空白的{ }行,在程序調試時期需要單步執行需要斷行,在程序復雜代碼量大時空白{ }使結構清晰明了。每行代碼限定為80字符寬,當一行裝不下內容時,需要進行折行。
折行規則:
1. 在分號處折行;
2.在操作符前折行。操作符包括+,-,*,/,左括號,逗號,”&&”,”||”,問號,冒號,例外的情況是在逗號后折行;
3.當函數聲明、定義、調用或 enum 聲明中枚舉操作符的參數列表參數較多,不能置於一行,則將每一個列表元素置於單獨的一行;
-
注釋:
注釋應當作為源代碼的補充,而不是直譯源代碼。注釋中應避免重復程序標識符,避免復制別處有的信息(此時可使用一個指向信息的指針)。否則程序中的任何一處改動都可能需要多處進行相應的變動。如果其他地方沒有進行所需的注釋改動,將會導致誤注釋:這種結果比根本沒有注釋還要糟糕。
- 它們應當解釋不能直接從源代碼看出東西;它們不應復制語言的語法或語義。
- 它們應當幫助讀者掌握背景中的概念、依賴性、特別是復雜的數據代碼和算法。
- 它們應當突出:與代碼或設計標准的不同點、受限特性的使用、以及特殊的“技巧”。
i : 在每一函數定義代碼段前,應該有一段注釋,用於說明該函數的函數名,函數功能描述,輸入參數描述,輸出變量說明,算法描述。例:
/*
*--------------------------------------------------------------------------------
* Member Name : 成員函數名
* Function Description : 功能描述
* Parameter Specification : 輸入參數描述
* Return Specification : 返回變量說明
* Algorithm : 算法描述
* Addtion : 附加說明,如調用說明,前置條件,后置條件。
*--------------------------------------------------------------------------------
*/
ii : 關鍵修改的地方應加注釋說明。
/*
* Revision : 修改版本
* Revision Date and Time : 修改日期與時間
* Mender : 修改人
* Revision Description : 修改內容簡要描述
*/
-
命名規則:
- 對“匈牙利命名法”合理的簡化,變量名盡量使得程序員一眼便能看出其含義,明顯易懂的變量類型可以不需要在其中體現;
- 采取簡便縮寫格式,對於可以簡寫表示的變量不需要過多描述;
- 避免不必要的修飾詞,如果刪減修飾詞程序不會變的難懂,那么便可刪減;
- 使用下划線分隔變量名中的作用域標注和變量的語義;比如Word_Count;
-
-
i : 所有的類型/類/函數名都用Pascal形式:所 有單詞的第一個字母都大寫;
-
ii : 所有變量使用Camel形式,第一個單詞全部小寫,隨后單詞隨Pascal形式;
-
iii : 常量全用大寫的字母,用下划線分割單詞。
-
iv : 靜態變量加前綴s_(表示static)。
-
v : 如果不得已需要全局變量,則使全局變量加前綴g_(表示global)。
-
示例代碼:
class Node; // 類名
class LeafNode; // 類名
void Draw(void); // 函數名
void SetValue(int value); // 函數名
BOOL flag;
int drawMode;
const int MAX = 100;
const int MAX_LENGTH = 100;
void Init(…)
{
static int s_initValue; // 靜態變量
…
}
int g_howManyPeople; // 全局變量
int g_howMuchMoney; // 全局變量
參考文章:
以及中央研究院C++ 編碼規范的word文檔;
