Namespaces
Variants

Comments

From cppreference.net
< c

コメントは一種のコード内ドキュメントとして機能します。プログラムに挿入されると、それらはコンパイラによって事実上無視されます。コメントは、ソースコードを読む人間がメモとして使用することを目的としています。

目次

構文

/* コメント */ (1)
// コメント (2) (C99以降)
1) しばしば「Cスタイル」または「複数行」コメントとして知られています。
2) しばしば「C++スタイル」または「単一行」コメントとして知られています。

すべてのコメントはプログラムから translation phase 3 で削除され、各コメントは単一の空白文字で置き換えられます。

Cスタイル

Cスタイルコメントは通常、大きなテキストブロックや小さなコードフラグメントをコメントするために使用されますが、単一行のコメントにも使用できます。Cスタイルコメントとしてテキストを挿入するには、単にテキストを /* */ で囲みます。Cスタイルコメントはコンパイラに /* */ の間のすべての内容を無視するように指示します。C標準の一部ではありませんが、 /** **/ はドキュメンテーションブロックを示すためによく使用されます。これは2つ目のアスタリスクが単にコメントの一部として扱われるため、正当な記法です。

文字定数、文字列リテラル、またはコメント内を除き、 character constant string literal またはコメントの外側では、文字 /* がコメントの開始を示します。このようなコメントの内容は、マルチバイト文字の識別とコメントを終了する文字 */ の検出のみを目的として検査されます。Cスタイルのコメントはネストできません。

C++-style

C++-styleコメントは通常、単一行のテキストやコードのコメントに使用されますが、複数行のコメントを形成するためにまとめて配置することもできます。C++-styleコメントとしてテキストを挿入するには、テキストの前に // を付け、テキストの後に改行文字を続けるだけです。C++-styleコメントは、 // と改行の間のすべての内容を無視するようコンパイラに指示します。

文字定数 内、 文字列リテラル 内、またはコメント内を除き、文字 // は、次の改行文字まで(ただし改行文字を含まない)のすべてのマルチバイト文字を含むコメントを開始します。このようなコメントの内容は、マルチバイト文字を識別し、コメントを終了する改行文字を見つけるためにのみ検査されます。C++-styleコメントはネストできます:

//  y = f(x);   // invoke algorithm

C-styleコメントはC++-styleコメント内に現れることがあります:

//  y = f(x);   /* invoke algorithm */

C++-styleコメントはC-styleコメント内に現れることがあります。これはソースコードの小さなブロックを除外するための仕組みです:

/*
    y = f(x);   // invoke algorithms
    z = g(x);
*/
(C99以降)

注記

コメントは 除去される ため、マクロを使用してコメントを形成することはできず、終端がないCスタイルのコメントは #include されたファイルから溢れ出ることはありません。

/* マクロを使用してコメントを形成する試み */
/* ただし、文字列 "//" は空白に置き換えられる */
#ifndef DEBUG
    #define PRINTF //
#else
    #define PRINTF printf
#endif
...  
PRINTF("Error in file %s at line %i\n", __FILE__, __LINE__);

コメントアウト以外に、ソースコードの除外に使用される他のメカニズムは以下の通りです:

#if 0
    puts("this will not be compiled");
    /* Cスタイルコメントとの競合はありません */
    // C++スタイルコメントとの競合はありません
#endif

and

if(0) {
    puts("this will be compiled but not be executed");
    /* no conflict with C-style comments */
    // no conflict with C++-style comments
}

C99における//コメントの導入は、一部の稀な状況において破壊的変更となりました:

a = b //*divisor:*/ c
+ d; /* C89では a = b / c + d; とコンパイルされる;
        C99では a = b + d; とコンパイルされる */

#include <stdio.h>
/*
C-style comments can contain
multiple lines.
*/
/* Or, just one line. */
// C++-style comments can comment one line.
// Or, they can
// be strung together.
int main(void)
{
  // The below code won't be run
  // puts("Hello");
  // The below code will be run
  puts("World");
  // A note regarding backslash + newline.
  // Despite belonging to translation phase 2 (vs phase 3 for comments),
  // '\' still determines which portion of the source code is considered
  // as 'comments':
  // This comment will be promoted to the next line \
  puts("Won't be run"); // may issue a warning "multi-line comment"
  puts("Hello, again");
}

出力:

World
Hello, again

参考文献

  • C17規格 (ISO/IEC 9899:2018):
  • 6.4.9 コメント (p: 54)
  • C11規格 (ISO/IEC 9899:2011):
  • 6.4.9 コメント (p: 75)
  • C99規格 (ISO/IEC 9899:1999):
  • 6.4.9 コメント (p: 66)
  • C89/C90標準 (ISO/IEC 9899:1990):
  • 3.1.9 コメント

関連項目

C++ documentation for Comments