C ++では、これは次のとおりです。
#ifdef A && B
と同じ:
#if defined(A) && defined(B)
?
そうではないと思っていたのですが、コンパイラー(VS2005)との違いを見つけることができませんでした。
C ++では、これは次のとおりです。
#ifdef A && B
と同じ:
#if defined(A) && defined(B)
?
そうではないと思っていたのですが、コンパイラー(VS2005)との違いを見つけることができませんでした。
回答:
それらは同じではありません。最初のものは機能しません(私はgcc 4.4.1でテストしました)。エラーメッセージは次のとおりです。
test.cc:1:15:警告:#ifdefディレクティブの最後に追加のトークン
複数のものが定義されているかどうかを確認したい場合は、2番目のものを使用してください。
#ifディレクティブで定義された演算子を使用して、プリプロセッサ行内で0または1と評価される式を使用できます。これにより、ネストされた前処理ディレクティブを使用する必要がなくなります。識別子を囲む括弧はオプションです。例えば:
#if defined (MAX) && ! defined (MIN)
定義された演算子を使用せずに、上記の例を実行するには、次の2つのディレクティブを含める必要があります。
#ifdef max #ifndef min
次の結果は同じです。
1.1。
#define A
#define B
#if(defined A && defined B)
printf("define test");
#endif
2.2。
#ifdef A
#ifdef B
printf("define test");
#endif
#endif
#else
、問題を引き起こす可能性があります。最初のオプションだけが、実際には質問者が求めたものを正確に意味します。
OPとは少し異なる例(UNIX / g ++)を探している人にとって、これは役立つかもしれません:
`
#if(defined A && defined B && defined C)
const string foo = "xyz";
#else
#if(defined A && defined B)
const string foo = "xy";
#else
#if(defined A && defined C)
const string foo = "xz";
#else
#ifdef A
const string foo = "x";
#endif
#endif
#endif
#endif