三、注釋規范:
1、函數頭的注釋
對於函數,應該從“功能”,“參數”,“返回值”、“主要思路”、“調用方法”、“日期”六個方面用如下格式注釋:
//程序說明開始
//================================================================//
// 功能: 從一個String 中刪除另一個String。
// 參數: strByDelete,strToDelete
// (入口) strByDelete: 被刪除的字符串(原來的字符串)
// (出口) strToDelete: 要從上個字符串中刪除的字符串。
// 返回: 找到並刪除返回1,否則返回0。(對返回值有錯誤編碼的要// 求列出錯誤編碼)。
// 主要思路:本算法主要采用循環比較的方法來從strByDelete中找到
// 與strToDelete相匹配的字符串,對多匹配strByDelete
// 中有多個strToDelete子串)的情況沒有處理。請參閱:
// 書名......
// 調用方法:......
// 日期:起始日期,如:2000/8/21.9:40--2000/8/23.21:45
//================================================================//
函數名(……)
//程序說明結束
①、對於某些函數,其部分參數為傳入值,而部分參數為傳出值,所以對參數要詳細說明該參數是入口參數,還是出口參數,對於某些意義不明確的參數還要做詳細說明(例如:以角度作為參數時,要說明該角度參數是以弧度(PI),還是以度為單位),對既是入口又是出口的變量應該在入口和出口處同時標明。等等。
②、函數的注釋應該放置在函數的頭文件中,在實現文件中的該函數的實現部分應該同時放置該注釋。
③、在注釋中應該詳細說明函數的主要實現思路、特別要注明自己的一些想法,如果有必要則應該寫明對想法產生的來由。對一些模仿的函數應該注釋上函數的出處。
④、在注釋中詳細注明函數的適當調用方法,對於返回值的處理方法等。在注釋中要強調調用時的危險方面,可能出錯的地方。
⑤、對日期的注釋要求記錄從開始寫函數到結束函數的測試之間的日期。
⑥、對函數注釋開始到函數命名之間應該有一組用來標識的特殊字符串。
如果算法比較復雜,或算法中的變量定義與位置有關,則要求對變量的定義進行圖解。對難以理解的算法能圖解盡量圖解。
2、變量的注釋:
對於變量的注釋緊跟在變量的後面說明變量的作用。原則上對於每個變量應該注釋,但對於意義非常明顯的變量,如:i,j等循環變量可以不注釋。
例如: long lLineCount //線的根數。
3、文件的注釋:
文件應該在文件開頭加入以下注釋:
/////////////////////////////////////////////////////////////////////
// 工程: 文件所在的項目名。
// 作者:**,修改者:**
// 描述:說明文件的功能。
// 主要函數:…………
// 版本: 說明文件的版本,完成日期。
// 修改: 說明對文件的修改內容、修改原因以及修改日期。
// 參考文獻: ......
/////////////////////////////////////////////////////////////////////
為了頭文件被重復包含要求對頭文件進行定義如下:
#ifndef __FILENAME_H__
#define __FILENAME_H__
其中FILENAME為頭文件的名字。
4、其他注釋:
在函數內我們不需要注釋每一行語句。但必須在各功能模塊的每一主要部分之前添加塊注釋,注釋每一組語句,在循環、流程的各分支等,盡可能多加以注釋。
其中的循環、條件、選擇等位置必須注釋。
對於前後順序不能顛倒的情況,建議在注釋中增加序號。
例如:
......
//1、......注釋
for (......)
{
}
if(......)
{//......注釋
}
else
{//......注釋
}
//......注釋
switch(......)
{
case: ......// ......注釋
......
case: ......// ......注釋
......
default: //......注釋
......
}
在其他順序執行的程序中,每隔3-5行語句,必須加一個注釋,注明這一段語句所組成的小模塊的作用。對於自己的一些比較獨特的思想要求在注釋中標明。