首頁  >  文章  >  後端開發  >  在c程式中,註解語句只能位於一條語句的後面嗎

在c程式中,註解語句只能位於一條語句的後面嗎

青灯夜游
青灯夜游原創
2020-12-31 14:01:0425965瀏覽

錯誤,在C語言中註解部分對程式的運行結果不產生任何影響,它可以出現在程式的任何位置。在C語言中有兩種註解方式:一種是以「/*」開始、以「*/」結束的區塊註解;一種是以「//」開始、以換行符號結束的單行註解。

在c程式中,註解語句只能位於一條語句的後面嗎

本文操作環境:windows10系統、c11、thinkpad t480電腦。

相關推薦: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程式中,註解語句只能位於一條語句的後面嗎的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn