名前空間
変種
操作

コメント

From cppreference.com
< c

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

目次

[編集] 構文

/* コメント */ (1)
// コメント (2) (C99以降)
1) 「C形式」または「複数行」コメントとしてよく知られています。
2) 「C++形式」または「単一行」コメントとしてよく知られています。

すべてのコメントは、翻訳フェーズ3で、各コメントが単一の空白文字に置き換えられることによってプログラムから削除されます。

[編集] C形式

C形式のコメントは、通常、大きなテキストブロックやコードの小さな断片をコメントアウトするために使用されますが、単一行のコメントにも使用できます。テキストをC形式のコメントとして挿入するには、テキストを`/*`と`*/`で囲みます。C形式のコメントは、`/*`と`*/`の間のすべての内容を無視するようにコンパイラに指示します。Cの規格には含まれていませんが、`/**`と`**/`はドキュメントブロックを示すためによく使用されます。2番目のアスタリスクは単にコメントの一部として扱われるため、これは正当な記述です。

文字定数文字列リテラル、またはコメント内を除き、文字`/*`はコメントを開始します。このようなコメントの内容は、多バイト文字を識別し、コメントを終了させる文字`*/`を見つけるためにのみ走査されます。C形式のコメントはネスト(入れ子に)できません。

C++形式

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

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

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

C++形式のコメント内にC形式のコメントが現れることがあります。

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

C形式のコメント内にC++形式のコメントが現れることがあります。これはソースコードの小さなブロックを除外するためのメカニズムです。

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

[編集] 備考

コメントはプリプロセッサ段階の前に削除されるため、マクロを使用してコメントを形成することはできず、また、閉じられていないC形式のコメントが#includeされたファイルからあふれ出すこともありません。

/* An attempt to use a macro to form a comment. */
/* But, a space replaces characters "//".       */
#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");
    /* no conflict with C-style comments */
    // no conflict with C++-style comments
#endif

および

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 compiles a = b / c + d;
        C99 compiles 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 Comments (p: 54)
  • C11標準 (ISO/IEC 9899:2011)
  • 6.4.9 Comments (p: 75)
  • C99標準 (ISO/IEC 9899:1999)
  • 6.4.9 Comments (p: 66)
  • C89/C90標準 (ISO/IEC 9899:1990)
  • 3.1.9 Comments

[編集] 関連項目

コメントC++ドキュメント
English 日本語 中文(简体) 中文(繁體)