2

以下は、オープン ソース プロジェクトのコードで見つけたものです。

#if 0
static int print_cb(UNUSED void *ctx, void *i)
{
    fprintf(stderr, "%i\n", *(int*)i);
    return 0;
}
#endif

これが常に false if の理由を説明できますか?

ありがとう。

4

4 に答える 4

10

これは、プリプロセッサを使用して大きなコード ブロックをコメント アウトする (コンパイルを防ぐ) 方法にすぎません。それはかなり一般的です。

ネストしないため、実際のコメント構文を使用するよりも優れています。あなたが持っている場合:

int foo = 13; /* This won't be needed. */

次のようにしてコメントアウトすることはできません。

/*
int foo = 13; /* This won't be needed. */
*/

コメント構文はネストしないため、上記はコンパイルされません。メソッドを使用すると、#if 0その制限を回避できます。

于 2013-10-21T12:49:28.467 に答える
7

コードをコメントアウトする方法です。条件が満たされることはありません (0 が true になることはありません) ため、プリプロセッサはコンパイルからコードを除外します。

/* */これは通常、別の複数行コメントで囲んでコメントアウトできない複数行コメントが埋め込まれている可能性のある大きなコードブロックで使用されます。

于 2013-10-21T12:49:13.490 に答える
4

これは、複数行コメントのようなこのコード セクションを無効にするだけです。ネストされたコメントを避ける方が良い方法です。

于 2013-10-21T12:49:56.123 に答える
1

ここのプリプロセッサ定義から

プリプロセッサ ディレクティブは、プログラム ステートメントではなく、プリプロセッサのディレクティブであるプログラムのコードに含まれる行です。これらの行の前には常にハッシュ記号 (#) が付きます。プリプロセッサは、コードの実際のコンパイルが開始される前に実行されるため、ステートメントによってコードが生成される前に、プリプロセッサはこれらすべてのディレクティブを消化します。

ということで、ブロックに入らずスキップという#if 0ことで(ざっくり言うと)、ということになります。#if (false)何かをコメントアウトする方法。

于 2013-10-21T12:56:28.113 に答える