サーチ…


前書き

コメントは、コードを読む人に何かを示すために使用されます。コメントはコンパイラによって空白として扱われ、コードの実際の意味で何も変更されません。 Cのコメントには2つの構文があり、元の/* */と少し古い//です。いくつかのドキュメントシステムでは、特別な書式のコメントを使用してコードのドキュメンテーションを作成しています。

構文

  • /*...*/
  • //... (C99以降のみ)

/ * * /区切られたコメント

コメントはスラッシュ、アスタリスク( /* )で始まり、アスタリスクの直後にスラッシュ( */ )が続くとすぐに終了します。これらの文字の組み合わせの間のすべてがコメントであり、コンパイラによって空白(基本的に無視される)として扱われます。

/* this is a comment */

上記のコメントは一行コメントです。この/*型のコメントは、次のように複数の行にまたがることができます:

/* this is a
multi-line
comment */

厳密には必要ではありませんが、複数行のコメントを使用する一般的なスタイル規則では、最初の行に続く空白とアスタリスクを新しい行に/**/を付けて並べます。

/* 
 * this is a
 * multi-line
 * comment
 */

余分なアスタリスクは、コメントに機能的な影響を及ぼさず、関連するスラッシュはありません。

これらの/*タイプのコメントは、それぞれの行、コード行の最後、またはコード行内で使用することができます。

/* this comment is on its own line */
if (x && y) { /*this comment is at the end of a line */
    if ((complexCondition1) /* this comment is within a line of code */
            && (complexCondition2)) {
        /* this comment is within an if, on its own line */
    }
}

コメントはネストできません。これは、その後の/*は(コメントの一部として)無視され、最初の*/がコメントの終了として扱われるためです。次の例のコメントは機能しません

/* outer comment, means this is ignored => /* attempted inner comment */ <= ends the comment, not this one => */

このタイプのコメントを含むコードのブロックをコメントするには、そうでなければネストされます。以下の「プリプロセッサを使用しコメントの例」を参照してください。

//区切られたコメント

C99

C99では、C ++スタイルの単一行コメントを使用しました。このタイプのコメントは2つのスラッシュで始まり、行末まで実行されます。

// this is a comment

このタイプのコメントでは、複数行のコメントは許可されませんが、いくつかの1行のコメントを1つずつ追加してコメントブロックを作成することは可能です。

// each of these lines are a single-line comment
// note how each must start with
// the double forward-slash

このタイプのコメントは、それ自身の行またはコード行の最後に使用できます。ただし、 行の最後まで実行れるため、コード行内で使用されない可能性があります

// this comment is on its own line
if (x && y) { // this comment is at the end of a line
    // this comment is within an if, on its own line
}

プリプロセッサを使ったコメント

大量のコードは、プリプロセッサディレクティブ#if 0#endifを使用して "コメントアウト"することもできます。これは、コードに複数行のコメントが含まれていて、それ以外の場合にはネストされない場合に便利です。

#if 0 /* Starts the "comment", anything from here on is removed by preprocessor */ 

/* A large amount of code with multi-line comments */  
int foo()
{
    /* lots of code */
    ...

    /* ... some comment describing the if statement ... */
    if (someTest) {
        /* some more comments */
        return 1;
    }

    return 0;
}

#endif /* 0 */

/* code from here on is "uncommented" (included in compiled executable) */
... 

トリグラフによる落とし穴

C99

書いている間//区切りのコメントを、彼らの期待される動作に影響を及ぼす誤字を行うことが可能です。 1つのタイプの場合:

int x = 20;  // Why did I do this??/

最後の/はtypoでしたが、 \に解釈されます。これは??/三角形を形成するためです。

??/ trigraphは実際には行継続記号である\長さ表記です。これは、次の行が現在の行の続き、つまりコメントの続きであるとコンパイラが考えていることを意味します。

int foo = 20; // Start at 20 ??/
int bar = 0;

// The following will cause a compilation error (undeclared variable 'bar')
// because 'int bar = 0;' is part of the comment on the preceding line
bar += foo;


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow