華爲軟件編程規範學習(二)--註釋

華爲軟件編程規範學習(二)--註釋

轉自:http://blog.csdn.net/ce123_zhouwei/article/details/8885964

2-1:一般情況下,源程序有效註釋量必須在20%以上

說明:註釋的原則是有助於對程序的閱讀理解,在該加的地方都加了,註釋不宜太多也不能太少,註釋語言必須準確、易懂、簡潔。

2-2:說明性文件(如頭文件.h文件、.inc文件、.def文件、編譯說明文件.cfg等)頭部應進行註釋,註釋必須列出:版權說明、版本號、生成日期、作者、內容、功能、與其它文件的關係、修改日誌等,頭文件的註釋中還應有函數功能簡要說明

示例:下面這段頭文件的頭註釋比較標準,當然,並不侷限於此格式,但上述信息建議要包含在內。

[plain] view plain copy
  1. /*************************************************  
  2.   Copyright (C),1988-1999, Huawei Tech. Co., Ltd.  
  3.   Filename:      // 文件名  
  4.   Author:      Version:        Date: // 作者、版本及完成日期  
  5.   Description:    // 用於詳細說明此程序文件完成的主要功能,與其他模塊  
  6.                  // 或函數的接口,輸出值、取值範圍、含義及參數間的控  
  7.                  // 制、順序、獨立或依賴等關係  
  8.   Others:         // 其它內容的說明  
  9.   FunctionList:  // 主要函數列表,每條記錄應包括函數名及功能簡要說明  
  10.     1.....  
  11.   History:        // 修改歷史記錄列表,每條修改記錄應包括修改日期、修改  
  12.                  // 作者及修改內容簡述   
  13.     1.Date:  
  14.       Author:  
  15.       Modification:  
  16.     2....  
  17. *************************************************/  

2-3:源文件頭部應進行註釋,列出:版權說明、版本號、生成日期、作者、模塊目的/功能、主要函數及其功能、修改日誌等。

示例:下面這段源文件的頭註釋比較標準,當然,並不侷限於此格式,但上述信息建議要包含在內。

[plain] view plain copy
  1. /************************************************************  
  2.   Copyright (C),1988-1999, Huawei Tech. Co., Ltd.  
  3.   FileName:test.cpp  
  4.   Author:        Version:          Date:  
  5.   Description:     // 模塊描述       
  6.   Version:         // 版本信息  
  7.   FunctionList:   // 主要函數及其功能  
  8.     1.-------  
  9.   History:         // 歷史修改記錄  
  10.      <author>  <time>   <version >  <desc>  
  11.      David    96/10/12    1.0     build this moudle   
  12. ***********************************************************/  

說明:Description一項描述本文件的內容、功能、內部各部分之間的關係及本文件與其它文件關係等。History是修改歷史記錄列表,每條修改記錄應包括修改日期、修改者及修改內容簡述。

2-4:函數頭部應進行註釋,列出:函數的目的/功能、輸入參數、輸出參數、返回值、調用關係(函數、表)等

示例:下面這段函數的註釋比較標準,當然,並不侷限於此格式,但上述信息建議要包含在內。

[plain] view plain copy
  1. /*************************************************  
  2.  Function:       // 函數名稱  
  3.  Description:    // 函數功能、性能等的描述  
  4.  Calls:          // 被本函數調用的函數清單  
  5.  CalledBy:      // 調用本函數的函數清單  
  6.  TableAccessed: // 被訪問的表(此項僅對於牽扯到數據庫操作的程序)  
  7.  TableUpdated:  // 被修改的表(此項僅對於牽扯到數據庫操作的程序)  
  8.  Input:          // 輸入參數說明,包括每個參數的作  
  9.                  // 用、取值說明及參數間關係。  
  10.  Output:         // 對輸出參數的說明。  
  11.  Return:         // 函數返回值的說明  
  12.  Others:         // 其它說明  
  13. *************************************************/  

2-5:邊寫代碼邊註釋,修改代碼同時修改相應的註釋,以保證註釋與代碼的一致性。不再有用的註釋要刪除

2-6:註釋的內容要清楚、明瞭,含義準確,防止註釋二義性

說明:錯誤的註釋不但無益反而有害。

2-7:避免在註釋中使用縮寫,特別是非常用縮寫

說明:在使用縮寫時或之前,應對縮寫進行必要的說明。

2-8:註釋應與其描述的代碼相近,對代碼的註釋應放在其上方或右方(對單條語句的註釋)相鄰位置,不可放在下面如放於上方則需與其上面的代碼用空行隔開

示例:如下例子不符合規範。

[plain] view plain copy
  1. repssn_ind = ssn_data[index].repssn_index;  
  2. repssn_ni = ssn_data[index].ni;  
  3. /* get replicate subsystem index and net indicator */  

應如下書寫

[plain] view plain copy
  1. /* get replicate subsystem index and net indicator */  
  2. repssn_ind =ssn_data[index].repssn_index;  
  3. repssn_ni =ssn_data[index].ni;  

2-9:對於所有有物理含義的變量、常量,如果其命名不是充分自注釋的,在聲明時都必須加以註釋,說明其物理含義。變量、常量、宏的註釋應放在其上方相鄰位置或右方

示例:

[plain] view plain copy
  1. /* active statistictask number */  
  2. #defineMAX_ACT_TASK_NUMBER 1000  
  3. #defineMAX_ACT_TASK_NUMBER 1000 /* active statistic task number */  

2-10:數據結構聲明(包括數組、結構、類、枚舉等),如果其命名不是充分自注釋的,必須加以註釋。對數據結構的註釋應放在其上方相鄰位置,不可放在下面;對結構中的每個域的註釋放在此域的右方

示例:可按如下形式說明枚舉/數據/聯合結構。

[plain] view plain copy
  1. /* sccp interfacewith sccp user primitive message name */  
  2. enum  SCCP_USER_PRIMITIVE  
  3. {  
  4.    N_UNITDATA_IND, /* sccp notify sccp user unit data come */  
  5.    N_NOTICE_IND,   /* sccp notify user the No.7 network can not */  
  6.                    /* transmission this message */  
  7.    N_UNITDATA_REQ, /* sccp user's unit data transmission request*/  
  8. };  

2-11:全局變量要有較詳細的註釋,包括對其功能、取值範圍、哪些函數或過程存取它以及存取時注意事項等的說明

示例:

[plain] view plain copy
  1. /* The ErrorCode whenSCCP translate */  
  2. /* Global Titlefailure, as follows */      // 變量作用、含義  
  3. /* 0 - SUCCESS   1 - GT Table error */  
  4. /* 2 - GT error  Others - no use */       // 變量取值範圍  
  5. /* only  function SCCPTranslate() in */  
  6. /* this modual canmodify it,  and  other */  
  7. /* module can visitit through call */  
  8. /* the  functionGetGTTransErrorCode() */    // 使用方法  
  9. BYTE g_GTTranErrorCode;   

2-12:註釋與所描述內容進行同樣的縮排

說明:可使程序排版整齊,並方便註釋的閱讀與理解。

示例:如下例子,排版不整齊,閱讀稍感不方便

[plain] view plain copy
  1. void example_fun(void )  
  2. {  
  3. /* code one comments*/  
  4.    CodeBlock One  
  5.    
  6.        /* code two comments */  
  7.    CodeBlock Two  
  8. }  

應改爲如下佈局。

[plain] view plain copy
  1. void example_fun(void )  
  2. {  
  3.     /*code one comments */  
  4.    CodeBlock One  
  5.     /*code two comments */  
  6.    CodeBlock Two  
  7. }  

2-13:將註釋與其上面的代碼用空行隔開

示例:如下例子,顯得代碼過於緊湊。

[plain] view plain copy
  1. /* code one comments*/  
  2. program code one  
  3. /* code two comments*/  
  4. program code two  

應如下書寫

[plain] view plain copy
  1. /* code one comments*/  
  2. program code one  
  3.   
  4. /* code two comments*/  
  5. program code two  

2-14:對變量的定義和分支語句(條件分支、循環語句等)必須編寫註釋

說明:這些語句往往是程序實現某一特定功能的關鍵,對於維護人員來說,良好的註釋幫助更好的理解程序,有時甚至優於看設計文檔。

2-15:對於switch語句下的case語句,如果因爲特殊情況需要處理完一個case後進入下一個case處理,必須在該case語句處理完、下一個case語句前加上明確的註釋

說明:這樣比較清楚程序編寫者的意圖,有效防止無故遺漏break語句

示例(注意斜體加粗部分):

[plain] view plain copy
  1. caseCMD_UP:    
  2.    ProcessUp();  
  3.    break;  
  4. case CMD_DOWN:  
  5.     ProcessDown();  
  6.    break;  
  7. case CMD_FWD:   
  8.    ProcessFwd();  
  9.    if (...)  
  10.    {  
  11.         ...  
  12.         break;  
  13.    }  
  14.    else  
  15.    {  
  16.        ProcessCFW_B();   // now jump into case CMD_A  
  17.    }  
  18. caseCMD_A:     
  19.    ProcessA();     
  20.    break;  
  21. caseCMD_B:     
  22.    ProcessB();     
  23.    break;  
  24. case CMD_C:     
  25.    ProcessC();     
  26.     break;  
  27. caseCMD_D:     
  28.    ProcessD();     
  29.    break;  
  30. ...  

其他

2-1:避免在一行代碼或表達式的中間插入註釋

說明:除非必要,不應在代碼或表達中間插入註釋,否則容易使代碼可理解性變差。

2-2:通過對函數或過程、變量、結構等正確的命名以及合理地組織代碼的結構,使代碼成爲自注釋的

說明:清晰準確的函數、變量等的命名,可增加代碼可讀性,並減少不必要的註釋。

2-3:在代碼的功能、意圖層次上進行註釋,提供有用、額外的信息

說明:註釋的目的是解釋代碼的目的、功能和採用的方法,提供代碼以外的信息,幫助讀者理解代碼,防止沒必要的重複註釋信息。

示例:如下注釋意義不大。

[plain] view plain copy
  1. /* if receive_flag isTRUE */  
  2. if (receive_flag)  

而如下的註釋則給出了額外有用的信息。

[plain] view plain copy
  1. /* if mtp receive amessage from links */  
  2. if (receive_flag)  

2-4:在程序塊的結束行右方加註釋標記,以表明某程序塊的結束

說明:當代碼段較長,特別是多重嵌套時,這樣做可以使代碼更清晰,更便於閱讀。

示例:參見如下例子。

[plain] view plain copy
  1. if (...)  
  2. {  
  3.    //program code  
  4.    while (index < MAX_INDEX)  
  5.     {  
  6.        // program code  
  7.     }/* end of while (index < MAX_INDEX) */ // 指明該條while語句結束  
  8. } /* end of  if(...)*/ // 指明是哪條if語句結束  

2-5:註釋格式儘量統一,建議使用“/* …… */”

2-6:註釋應考慮程序易讀及外觀排版的因素,使用的語言若是中、英兼有的,建議多使用中文,除非能用非常流利準確的英文表達

說明:註釋語言不統一,影響程序易讀性和外觀排版,出於對維護人員的考慮,建議使用中文。
發佈了0 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章