1. 程式人生 > >福大軟工1816 · 第五次作業 - 結對作業2_代碼規範

福大軟工1816 · 第五次作業 - 結對作業2_代碼規範

返回值 結構 開始 輸出參數 def 代碼規範 復用 一行 入參

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_代碼規範