ホームページ  >  記事  >  バックエンド開発  >  C プログラムでは、コメント ステートメントはステートメントの後にのみ配置できますか?

C プログラムでは、コメント ステートメントはステートメントの後にのみ配置できますか?

青灯夜游
青灯夜游オリジナル
2020-12-31 14:01:0425939ブラウズ

エラーです。C 言語では、コメント部分はプログラムの実行結果には影響しません。プログラム内のどこにでも記述できます。 C言語のコメントには、「/*」で始まり「*/」で終わるブロックコメントと、「//」で始まり改行文字で終わる単行コメントの2種類があります。

C プログラムでは、コメント ステートメントはステートメントの後にのみ配置できますか?

#この記事の動作環境: Windows10 システム、c11、thinkpad t480 コンピューター。

関連する推奨事項:

C 言語ビデオ チュートリアル

C 言語でのコメント

C 言語ソースを作成するときコードを理解するために、より多くのコメントを使用する必要があります。 C 言語には 2 つのコメント メソッドがあります:

  • # 1 つは /* で始まり */ で終わるブロック コメントです;

  • もう 1 つは /* で始まり */ で終わるブロック コメントです。 // で始まり改行文字で終わる 1 行のコメントです。

/* および */ 区切り文字を使用して、1 行内のコメントをマークしたり、複数行のコメントをマークしたりできます。たとえば、次の関数プロトタイプの省略記号は、open() 関数にオプションの 3 番目のパラメーターがあることを意味します。コメントは、このオプションのパラメーターの使用法を説明しています:

int open( const char *name, int mode, … /* int permissions */ );

// を使用してコメントの行全体を挿入することも、左の列にプログラムを配置して 2 列形式でソース コードを記述することもできます。右側の列のコメント:

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。