錯誤,在C語言中註釋部分對程式的執行結果不產生任何影響,它可以出現在程式的任何位置。在C語言中有兩種註釋方式:一種是以「/*」開始、以「*/」結束的塊註釋;一種是以「//」開始、以換行符結束的單行註釋。
相關推薦:C語言視訊教學
C語言中的註釋
在編寫C語言原始碼時,應該多使用註釋,這樣有助於對程式碼的理解。在C語言中有兩種註釋方式:
一種是以/*開始、以*/結束的塊註釋(block comment);
另一種是以//開始、以換行符結束的單行註釋(line comment)。
可以使用/*和*/分隔符來標註一行內的註釋,也可以標註多行的註釋。例如,在下列的函數原型中,省略號的意思是 open() 函數有第三個引數,它是可選引數。註釋解釋了這個可選引數的用法:
int open( const char *name, int mode, … /* int permissions */ );
可以使用//插入整行的註釋,或者將原始碼寫成兩列分欄的格式,程式在左列,註釋在右列:
const double pi = 3.1415926536; // pi是—個常數
在 C99 標準中,單行註釋正式加入C語言,但是大部分編譯器在 C99 之前就已經開始支援這種用法。有時候,其被稱作「C++風格」的註釋,但實際上,其源自於C的前身 BCPL。
註釋的位置
在C語言中註釋部分對程式的執行結果不產生任何影響,它可以出現在程式的任何位置。
範例:
int/*....*/i; //正確 char* s="abcdefgh //hijklmn"; //正確 in/*...*/ti; //錯誤註釋會被空格替換 //注意: /*...*/不能巢狀 ,/*總是與離他最近的*/匹配 y=x/*p // 該語句由於沒有找到*/ 會報錯 //要實現以上功能 可以用y=x/(*p)或y=x/ *p代替
註釋規範
2-1:一般情況下,源程式有效註釋量必須在20%以上。
說明:註釋的原則是有助於對程式的閱讀理解,在該加的地方都加了,註釋不宜太多也不能太少,註釋語言必須準確、易懂、簡潔。
2-2:檔案頭部應進行註釋,註釋必須列出:版權說明、版本號、生成日期、作者、內容、功能、修改紀錄檔等。
範例:下面這段標頭檔案的頭註釋比較標準,當然,並不侷限於此格式,但上述資訊建議要包含在內。
/***************************************************************************** Copyright: 1988-1999, Huawei Tech. Co., Ltd. File name: 檔名 Description: 用於詳細說明此程式檔案完成的主要功能,與其他模組或函數的介面,輸出值、取值範圍、含義及引數間的控制、順序、獨立或依賴等關係 Author: 作者 Version: 版本 Date: 完成日期 History: 修改歷史記錄列表, 每條修改記錄應包括修改日期、修改者及修改內容簡述。 *****************************************************************************/
2-3:函數頭部應進行註釋,列出:函數的目的/功能、輸入引數、輸出引數、返回值、呼叫關係(函數、表)等。
範例:下面這段函數的註釋比較標準,當然,並不侷限於此格式,但上述資訊建議要包含在內。
/************************************************* Function: // 函數名稱 Description: // 函數功能、效能等的描述 Calls: // 被本函數呼叫的函數清單 Called By: // 呼叫本函數的函數清單 Table Accessed: // 被存取的表(此項僅對於牽扯到資料庫操作的程式) Table Updated: // 被修改的表(此項僅對於牽扯到資料庫操作的程式) Input: // 輸入引數說明,包括每個引數的作// 用、取值說明及引數間關係。 Output: // 對輸出引數的說明。 Return: // 函數返回值的說明 Others: // 其它說明 ********************************************/
2-4:邊寫程式碼邊註釋,修改程式碼同時修改相應的註釋,以保證註釋與程式碼的一致性。不再有用的註釋要刪除。
2-5:註釋的內容要清楚、明瞭,含義準確,防止註釋二義性。說明:錯誤的註釋不但無益反而有害。
2-6:註釋應與其描述的程式碼相近,對程式碼的註釋應放在其上方或右方(對單條語句的註釋)相鄰位置,不可放在下面,如放於上方則需與其上面的程式碼用空行隔開。
範例:如下例子不符合規範。
例1:
/* get replicate sub system index and net indicator */ repssn_ind = ssn_data[index].repssn_index; repssn_ni = ssn_data[index].ni;
例2:
repssn_ind = ssn_data[index].repssn_index; repssn_ni = ssn_data[index].ni; /* get replicate sub system index and net indicator */
應如下書寫
/* get replicate sub system index and net indicator */ repssn_ind = ssn_data[index].repssn_index; repssn_ni = ssn_data[index].ni;
2-7:對於所有有物理含義的變數、常數,如果其命名不是充分自注釋的,在宣告時都必須加以註釋,說明其物理含義。變數、常數、宏的註釋應放在其上方相鄰位置或右方。
範例:
/* active statistic task number */ #define MAX_ACT_TASK_NUMBER 1000 #define MAX_ACT_TASK_NUMBER 1000 /* active statistic task number */
2-8:資料結構宣告(包括陣列、結構、類、列舉等),如果其命名不是充分自注釋的,必須加以註釋。對資料結構的註釋應放在其上方相鄰位置,不可放在下面;對結構中的每個域的註釋放在此域的右方。
範例:可按如下形式說明列舉/資料/聯合結構。
/* sccp interface with sccp user primitive message name */ enum SCCP_USER_PRIMITIVE { N_UNITDATA_IND, /* sccp notify sccp user unit data come */ N_NOTICE_IND, /* sccp notify user the No.7 network can not */ /* transmission this message */ N_UNITDATA_REQ, /* sccp user’s unit data transmission request */ };
2-9:全域性變數要有較詳細的註釋,包括對其功能、取值範圍、哪些函數或過程存取它以及存取時注意事項等的說明。
範例:
/* The ErrorCode when SCCP translate */ /* Global Title failure, as follows */ // 變數作用、含義 /* 0 - SUCCESS 1 - GT Table error */ /* 2 - GT error Others - no use */ // 變數取值範圍 /* only function SCCPTranslate() in */ /* this modual can modify it, and other */ /* module can visit it through call */ /* the function GetGTTransErrorCode() */ // 使用方法 BYTE g_GTTranErrorCode;
2-10:註釋與所描述內容進行同樣的縮排。
說明:可使程式排版整齊,並方便註釋的閱讀與理解。範例:如下例子,排版不整齊,閱讀稍感不方便。
void example_fun( void ) { /* code one comments */ CodeBlock One /* code two comments */ CodeBlock Two }
應改為如下佈局。
void example_fun( void ) { /* code one comments */ CodeBlock One /* code two comments */ CodeBlock Two }
2-11:避免在一行程式碼或表示式的中間插入註釋。
說明:除非必要,不應在程式碼或表達中間插入註釋,否則容易使程式碼可理解性變差。
2-12:通過對函數或過程、變數、結構等正確的命名以及合理地組織程式碼的結構,使程式碼成為自注釋的。
說明:清晰準確的函數、變數等的命名,可增加程式碼可讀性,並減少不必要的註釋。
2-13:在程式碼的功能、意圖層次上進行註釋,提供有用、額外的資訊。
說明:註釋的目的是解釋程式碼的目的、功能和採用的方法,提供程式碼以外的資訊,幫助讀者理解程式碼,防止沒必要的重複註釋資訊。
範例:如下注釋意義不大。
/* if receive_flag is TRUE */ if (receive_flag)
而如下的註釋則給出了額外有用的資訊。
/* if mtp receive a message from links */ if (receive_flag)
2-14:在程式塊的結束行右方加註釋標記,以表明某程式塊的結束。
說明:當程式碼段較長,特別是多重巢狀時,這樣做可以使程式碼更清晰,更便於閱讀。範例:參見如下例子。
if (…) { // program code while (index < MAX_INDEX) { // program code } /* end of while (index < MAX_INDEX) */ // 指明該條while 語句結束 } /* end of if (…)*/ // 指明是哪條if 語句結束
2-15:註釋格式儘量統一,建議使用「/*…… */」。
2-16:註釋應考慮程式易讀及外觀排版的因素,使用的語言若是中、英兼有的,建議多使用中文,除非能用非常流利準確的英文表達。
說明:註釋語言不統一,影響程式易讀性和外觀排版,出於對維護人員的考慮,建議使用中文。
更多程式設計相關知識,請存取:!!
以上就是在c程式中,註釋語句只能位於一條語句的後面嗎的詳細內容,更多請關注TW511.COM其它相關文章!