福大軟工1816 · 第五次作業 - 結對作業2_代碼規範
1.排版
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:不把多個短語句寫在一行中,即一行只寫一條語句。
示例:如下例子不符合規範。
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.註釋
2-1:適當添加註釋,註釋不宜太多也不能太少,註釋語言必須準確、易懂、簡潔。
2-2:函數頭部應進行註釋,列出:函數的目的/功能、輸入參數、輸出參數、返回值、調用關系(函數、表)等。
2-3:邊寫代碼邊註釋,修改代碼同時修改相應的註釋,以保證註釋與代碼的一致性。不再有用的註釋要刪除。
2-4:避免在註釋中使用縮寫
2-5:註釋應與其描述的代碼相近,對代碼的註釋應放在其上方或右方(對單條語句的註釋)相鄰位置,不可放在下面,如放於上方則需與其上面的代碼用空行隔開。
2-6:避免在一行代碼或表達式的中間插入註釋。
3.命名約定
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.可讀性
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;
5.程序效率
8-1:編程時要經常註意代碼的效率
8-2:在保證軟件系統的正確性、穩定性、可讀性及可測性的前提下,提高代碼效率。
8-3:局部效率應為全局效率服務,不能因為提高局部效率而對全局效率造成影響。
8-3:在傳參時,如果傳的數據較大,為避免進行數據拷貝的消耗,可以考慮使用引用或指針。
8-4:考慮采用更優的算法代替較差的算法,例如:在一些情況下,可以考慮用快排代替冒泡排序。
6.質量保證
9-1:只引用屬於自己的存貯空間。
9-2:防止引用已經釋放的內存空間。
9-3:函數中分配的內存,函數退出之前要釋放。
9-4:過程/函數中申請的(為打開文件而使用的)文件句柄,在過程/函數退出之前要關閉。
9-5:防止內存操作越界。
9-6:編程時,要防止差1錯誤。
說明:此類錯誤一般是由於把“<=”誤寫成“<”或“>=”誤寫成“>”等造成的,由此
引起的後果,很多情況下是很嚴重的,所以編程時,一定要在這些地方小心。當編完程序後,應對這些操作符進行徹底檢查。
9-7:不用goto語句。
說明: goto 語句會破壞程序的結構性,所以除非確實需要,最好不使用 goto 語句。
9-8:註意功能的獨立封裝
方便單元測試和將來的代碼復用
多交流、多溝通是最好的規範。
福大軟工1816 · 第五次作業 - 結對作業2_代碼規範