4

私が行う場合、プリコンパイル済みヘッダーで:

#define DS_BUILD
#define PGE_BUILD
#define DEMO

次に、ソースで私はします:

#if (DS_BUILD && DEMO)
    ---- code---
#elif (PGE_BUILD && DEMO)
    --- code---
#else
    --- code ---
#endif

次のようなエラーが発生しますか?

エラー:演算子'&&'に右オペランドがありません

私はこれを前に見たことがありません。OS X10.6.3でXCode3.2、GCC4.2を使用しています

4

4 に答える 4

13

定義したものが定義されていることを確認したいので、定義したキーワードを追加する必要があります。

#if defined (DS_BUILD) && defined (DEMO)
    ---- code---
#elif defined (PGE_BUILD) && defined (DEMO)
    --- code---
#else
    --- code ---
#endif
于 2010-04-07T22:56:54.053 に答える
4

最初に、条件付きコンパイルマクロをどのように使用するかを決定する必要があります。通常、2つの一般的なアプローチがあります。どちらかです

#define A
#define B

#ifdef A
...
#endif

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

また

#define A 1
#define B 0

#if A
...
#endif

#if A && B
...
#endif

つまり、マクロを定義してそれを#ifdefおよび/またはで分析#if defined()するか、マクロを数値として定義してであるかどうかを分析し#ifます。

コードサンプルでこれら2つのアプローチを混合していますが、これは一般的に意味がありません。使用するアプローチを決定し、それに固執します。

于 2010-04-07T22:55:34.977 に答える
2

の効果#define DEMOは、前処理中に、のすべての発生がDEMO何も置き換えられないことです('')。と同じ#define PGE_BUILDです。したがって、投稿した2番目のサンプルでは、​​効果的に取得できます#elif ( && )が、これはコンパイラにとってあまり意味がありません:)。

于 2010-04-07T22:57:22.940 に答える
1

DS_BUILDPGE_BUILDおよびの値を指定する必要がDEMOあります。または、ifdef を使用する必要があります。

#define DS_BUILD 1
#define PGE_BUILD 1
#define DEMO 1

上記のように定義するとうまくいきます

于 2010-04-07T22:59:22.087 に答える