1. 代碼風格規範
項 |
規範 |
說明 |
縮排 |
4個空格 |
用Tab的話在不同地方顯示長度會變 |
行寬 |
固定 |
限制為在VS2010中不隱藏Solution Explorer時不超出邊界 |
括弧 |
不要依賴優先順序而省略括弧 |
在複雜的條件運算式中清楚表示邏輯優先順序 |
斷行與空白的{}行 |
必須,不能省略 |
單步Debug需要; 使結構和對應關係清晰 |
底線 |
只有兩種情況下使用:
- 類的私人成員以底線開頭
- 事件響應函數以底線分隔對象和動作
|
|
大小寫 |
類型/類/函數名用Pascal形式 變數用Camel形式 |
類/類型/變數用組合名詞, 函數則用動詞或動賓組合詞 |
注釋 |
- 複雜的注釋應該放在函數頭;
- 注釋只用來解釋程式做什麼,為什麼這樣做,以及要特別注意的地方;
- 不要注釋程式是怎麼工作的,這應該在代碼中清晰體現
- 有明顯相似作用的代碼要用 #region #endregion 括起來並簡單注釋
|
注釋應隨程式的修改而不斷更新 |
命名規則:
項 |
規範 |
樣本 |
類的私人成員 |
以底線開頭,後第一個單詞首字母小寫其餘首字母大寫。 |
_startPosition |
類的公有成員 |
以屬性(Property)體現,私人成員若需外部存取必須通過屬性封裝。 |
public float StartPosition { get; private set; } |
類的屬性名稱 |
所有單詞的第一個首字母都要大寫。 |
StartPosition |
其它除類的私人成員外的變數 |
均為第一個單詞首字母小寫其餘首字母大寫。 |
myPrivateVariable |
類、枚舉、結構體的名字 |
所有單詞的第一個首字母都要大寫。 |
MiniSphere |
命名空間的名字 |
所有單詞的第一個首字母都要大寫; 不能有底線,若有說明需劃分子命名空間 |
|
注釋的一些模板:
檔案注釋 |
位於檔案開頭: /***************************************************************************\ * CodingCrazy Team @ MSRA-USTC Class * * Module Name:An unabbreviated name for the module (not the filename) * Abstract: * Description of what this module does * Notes: * [Optional] algorithm description, special case conditions, * references, etc. * * History: * Created on 2010-11-24 by xxx * # Add … * Modified on 2010-11-25 by xxx * # Add … * # Remove ... * # ... * Modified on 2010-11-26 by xxx * # ... \***************************************************************************/ |
函數頭部注釋 |
使用XML文檔型注釋,即/// |
函數內部注釋 |
一律使用 // |
2. 代碼設計規範
函數功能:只做一件事,但是要做好。
參數處理:所有傳遞過來的參數都需要用Assert斷言保證其正確性。
如:Assert( p != NULL ); Assert( s.length > 3 );
錯誤處理:只用作Debug用途的輸出資訊代碼等均需要嵌套在以下預先處理語句中。
#if _DAIDAI_DEBUG_
// 這裡是debug相關代碼
#endif
Tips:
- 使用Ctrl+K+C注釋成片代碼,Ctrl+K+U取消注釋。
- 善用程式碼片段和代碼環繞:
可以嘗試輸入#region後再按兩下Tab鍵。
輸入fore後按兩下Tab鍵再按Tab修改。
按#if後再按兩下Tab鍵。
選中一片代碼後右鍵菜單中選擇Surround with...再選擇 try或#region。
- 使用F12和Ctrl+'-'在代碼中導航。
- 使用右鍵Refractor功能表項目:比如用Encapsulate field來封裝類內私人成員。
- 使用右鍵Reslove功能表項目加入命名空間。