89

C ++では、これは次のとおりです。

#ifdef A && B

と同じ:

#if defined(A) && defined(B)

そうではないと思っていたのですが、コンパイラー(VS2005)との違いがわかりませんでした。

4

5 に答える 5

94

それらは同じではありません。最初のものは機能しません(私はgcc 4.4.1でテストしました)。エラーメッセージは次のとおりです。

test.cc:1:15:警告:#ifdefディレクティブの最後に追加のトークン

複数のものが定義されているかどうかを確認したい場合は、2番目のものを使用してください。

于 2009-08-21T14:03:36.237 に答える
50

条件付きコンパイル

#ifディレクティブで定義された演算子を使用して、プリプロセッサ行内で0または1と評価される式を使用できます。これにより、ネストされた前処理ディレクティブを使用する必要がなくなります。識別子を囲む括弧はオプションです。例えば:

#if defined (MAX) && ! defined (MIN)  

定義された演算子を使用せずに、上記の例を実行するには、次の2つのディレクティブを含める必要があります。

#ifdef max 
#ifndef min
于 2009-08-21T14:03:50.370 に答える
4

次の結果は同じです。

1.

#define A
#define B
#if(defined A && defined B)
printf("define test");
#endif

2.

#ifdef A
#ifdef B
printf("define test");
#endif
#endif
于 2016-07-20T07:06:34.943 に答える