1-1:程序塊要採用縮進風格編寫,縮進爲一個Tab。算法
說明:對於由開發工具自動生成的代碼能夠有不一致。編程
1-2:相對獨立的程序塊之間、變量說明以後必須加空行。函數
示例:以下例子不符合規範。工具
if (!valid_ni(ni)) { ... // program code } repssn_ind = ssn_data[index].repssn_index; repssn_ni = ssn_data[index].ni;
應以下書寫單元測試
if (!valid_ni(ni)) { ... // program code } repssn_ind = ssn_data[index].repssn_index; repssn_ni = ssn_data[index].ni;
1-3:較長的語句(>80字符)要分紅多行書寫,長表達式要在低優先級操做符處劃分新行,
操做符放在新行之首,劃分出的新行要進行適當的縮進,使排版整齊,語句可讀。開發工具
1-4:循環、判斷等語句中如有較長的表達式或語句,則要進行適應的劃分,長表達式要在低
優先級操做符處劃分新行,操做符放在新行之首。測試
1-5:若函數或過程當中的參數較長,則要進行適當的劃分。指針
1-6:不把多個短語句寫在一行中,即一行只寫一條語句。code
示例:以下例子不符合規範。排序
rect.length = 0; rect.width = 0;
應以下書寫
rect.length = 0; rect.width = 0;
1-7:if、 for、 do、 while、 case、 switch、 default等語句自佔一行,且if、 for、
do、 while等語句的執行語句部分不管多少都要加括號{}。
1-8:對齊使用Tab
1-9:函數或過程的開始、結構的定義及循環、判斷等語句中的代碼都要採用縮進風格, case 語句下的狀況處理語句也要聽從語句縮進要求。
1-10:程序塊的分界符(如C/C++語言的大括號‘{’和‘}’)應各獨佔一行而且位於同一列,同時與引用它們的語句左對齊。在函數體的開始、類的定義、結構的定義、枚舉的定義以及if、 for、do、while、switch、case語句中的程序都要採用如上的縮進方式。
示例:以下例子不符合規範。
for (...) { ... // program code } if (...) { ... // program code }
應以下書寫
for (...) { ... // program code } if (...) { ... // program code }
1-11:在兩個以上的關鍵字、變量、常量進行對等操做時,它們之間的操做符以前、以後或者先後要加空格;進行非對等操做時,若是是關係密切的當即操做符(如->),後不該加空格。
(1) 逗號、分號只在後面加空格。
(2)比較操做符, 賦值操做符"="、"+=",算術操做符"+"、"%",邏輯操做符"&&"、"&",位域操做符"<<"、 "^"等雙目操做符的先後加空格。
(3)"!"、 "~"、 "++"、 "--"、 "&"(地址運算符)等單目操做符先後不加空格。
(4)"->"、 "."先後不加空格。
2-1:適當添加註釋,註釋不宜太多也不能太少,註釋語言必須準確、易懂、簡潔。
2-2:函數頭部應進行註釋,列出:函數的目的/功能、輸入參數、輸出參數、返回值、調用關係(函數、表)等。
2-3:邊寫代碼邊註釋,修改代碼同時修改相應的註釋,以保證註釋與代碼的一致性。再也不有用的註釋要刪除。
2-4:避免在註釋中使用縮寫
2-5:註釋應與其描述的代碼相近,對代碼的註釋應放在其上方或右方(對單條語句的註釋)相鄰位置,不可放在下面,如放於上方則需與其上面的代碼用空行隔開。
2-6:避免在一行代碼或表達式的中間插入註釋。
3-1:類命名:大駝峯式命名法(upper camel case)
類名以大寫字母開頭,不包含下劃線: MyExcitingClass、 MyExcitingEnum。全部類、結構體、類型定義(typedef)、枚舉—均使用相同約定。
例如:
// classes and structs class UrlTable { ... class UrlTableTester { ... struct UrlTableProperties { ... // typedefs typedef hash_map<UrlTableProperties *, string> PropertiesMap; // enums enum UrlTableErrors { ..
類成員以m_開頭,後使用小駝峯式命名法,如: m_charNum, m_phraseLen
類方法使用遵循小駝峯式命名法,第一個單詞以小寫字母開始,第二個單詞開始首字母大寫。如:getCharNum(), getWordNum()
3-2:變量命名:小駝峯式命名法(lower camel case)
第一個單詞以小寫字母開始,第二個單詞的首字母大寫。例如:firstName、lastName。
3-3:函數命名:大駝峯式命名法
每一個單詞首字母大寫。如:MyExcitingFunction()、MyExcitingMethod()
3-4:命名中若使用特殊約定或縮寫,則要有註釋說明。
3-5:對於變量命名,禁止取單個字符(如i、j、k...),建議除了要有具體含義外,還能代表其變量類型、數據類型等,但i、 j、 k做局部循環變量是容許的。
3-6:除非必要,不要用數字或較奇怪的字符來定義標識符。
4-1:注意運算符的優先級,並用括號明確表達式的操做順序, 防止閱讀程序時產生誤解
//示例:下列語句中的表達式 word = (high << 8) | low (1) if ((a | b) && (a & c)) (2) if ((a | b) < (c & d)) (3) //若是書寫爲 high << 8 | low a | b && a & c a | b < c & d //因爲 high << 8 | low = ( high << 8) | low, a | b && a & c = (a | b) && (a & c), //(1)(2)不會出錯,但語句不易理解; //a | b < c & d = a | (b < c) & d, (3)形成了判斷條件出錯。
4-2:避免使用不易理解的數字,用有意義的標識來替代。涉及物理狀態或者含有物理意義的常量,不該直接使用數字,必須用有意義的枚舉或宏來代替。
不要使用難懂的技巧性很高的語句,除非頗有必要時
示例:以下表達式,考慮不周就可能出問題,也較難理解。 * stat_poi ++ += 1; * ++ stat_poi += 1; 應分別改成以下。 *stat_poi += 1; stat_poi++; // 此二語句功能至關於「 * stat_poi ++ += 1; ++ stat_poi; *stat_poi += 1; // 此二語句功能至關於「 * ++ stat_poi += 1;
8-1:編程時要常常注意代碼的效率
8-2:在保證軟件系統的正確性、穩定性、可讀性及可測性的前提下,提升代碼效率。
8-3:局部效率應爲全局效率服務,不能由於提升局部效率而對全局效率形成影響。
8-3:在傳參時,若是傳的數據較大,爲避免進行數據拷貝的消耗,能夠考慮使用引用或指針。
8-4:考慮採用更優的算法代替較差的算法,例如:在一些狀況下,能夠考慮用快排代替冒泡排序。
9-1:只引用屬於本身的存貯空間。
9-2:防止引用已經釋放的內存空間。
9-3:函數中分配的內存,函數退出以前要釋放。
9-4:過程/函數中申請的(爲打開文件而使用的)文件句柄,在過程/函數退出以前要關閉。
9-5:防止內存操做越界。
9-6:編程時,要防止差1錯誤。
說明:此類錯誤通常是因爲把「<=」誤寫成「<」或「>=」誤寫成「>」等形成的,由此
引發的後果,不少狀況下是很嚴重的,因此編程時,必定要在這些地方當心。當編完程序後,應對這些操做符進行完全檢查。
9-7:不用goto語句。
說明: goto 語句會破壞程序的結構性,因此除非確實須要,最好不使用 goto 語句。
9-8:注意功能的獨立封裝
方便單元測試和未來的代碼複用