名前空間
変種

コメント

提供: cppreference.com
< c

コメントはある種のコード内ドキュメントとしての機能を持ちます。 プログラム内に挿入されたとき、それらは実質的にコンパイラによって無視されます。 それらはソースコードを読む人間によって注釈として使用されることだけが意図されています。

構文

/* comment */ (1)
// comment (2) (C99以上)
1) 「C スタイル」または「複数行」のコメントなどと言います。
2) 「C++ スタイル」または「単一行」のコメントなどと言います。

すべてのコメントは、翻訳フェーズ3で、各コメントが1個のホワイトスペース文字で置き換えられることによって、プログラムから除去されます。


C スタイル

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

文字定数内、文字列リテラル内、またはコメント内を除き、文字 /* はコメントを導入します。 そのようなコメントの内容は、マルチバイト文字を識別するためおよびコメントを終了する文字 */ を見付けるためにのみ調べられます。 C スタイルのコメントはネストすることができません。

C++ スタイル

C++ スタイルのコメントは、通常、単一行のテキストまたはコードをコメント化するために使用されますが、複数行のコメントを書くために C++ スタイルのコメントを複数並べることもできます。 テキストを C++ スタイルのコメントとして挿入するためには、単純にそのテキストの前に // を書き、その後にテキストと改行文字を続けます。 C++ スタイルのコメントは // と改行の間のすべての内容を無視するようコンパイラに伝えます。

文字定数内、文字列リテラル内、またはコメント内を除き、文字 // は次の改行文字まで (改行文字は含みません) のすべてのマルチバイト文字を含むコメントを導入します。 そのようなコメントの内容は、マルチバイト文字を識別するためおよびコメントを終了する改行を見付けるためにのみ調べられます。 C++ スタイルのコメントはネストすることができます。

//  y = f(x);   // 関数を呼びます。

C スタイルのコメントが C++ スタイルのコメント内に現れても構いません。

//  y = f(x);   /* 関数を呼びます。 */

C++ スタイルのコメントが C スタイルのコメント内に現れても構いません。 これは小さなソースコードのブロックを除外するための仕組みです。

/*
    y = f(x);   // 関数を呼びます。
    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

また、以下のようなものもあります。

if(0) {
    puts("this will be compiled but not be executed");
    /* C スタイルのコメントと衝突しません。 */
    // C++ スタイルのコメントと衝突しません。
}

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

a = b //*除数:*/ c
+ d; /* C89 では a = b / c + d; とコンパイルされます。
        C99 では a = b + d; とコンパイルされます。 */

#include <stdio.h>
/*
C スタイルのコメントは
複数の行を含むことができます。
*/

/* あるいは、1行だけにもできます。 */

// C++ スタイルのコメントは1行をコメント化できます。

// あるいは、複数個を並べて
// 使うこともできます。

int main(void)
{
  // 以下のコードは実行されません。
  // puts("Hello");

  // 以下のコードは実行されます。
  puts("World");
}

出力:

World

参考文献

  • C11 standard (ISO/IEC 9899:2011):
  • 6.4.9 Comments (p: 75)
  • C99 standard (ISO/IEC 9899:1999):
  • 6.4.9 Comments (p: 66)
  • C89/C90 standard (ISO/IEC 9899:1990):
  • 3.1.9 Comments

関連項目

コメントC++リファレンス