5

私はプログラムを持っています:

#include <iostream>

#define _DEBUG = 1

using namespace std;
int main() {
        #if (_DEBUG == 1)
                cout << "hello : " <<endl;
        #endif

        return 0;
}

これをコンパイルすると、次のエラーが発生します。

$ g++ a.cpp
a.cpp:7:7: error: token "=" is not valid in preprocessor expressions
$ g++ --version
g++ (MacPorts gcc46 4.6.3_8) 4.6.3

==は等式条件演算子だと思いましたか?

4

3 に答える 3

9

ただのタイプミスだと思います:

#define _DEBUG = 1

する必要があります

#define _DEBUG 1

私はいつもそれをします!

于 2012-09-24T23:33:07.460 に答える
8
#define _DEBUG = 1

_DEBUGこれは に展開されるマクロとして宣言されている= 1ため、条件式で展開すると、

#if (= 1 == 1)

これは明らかに有効な条件式ではありません。=マクロ定義からを削除する必要があります。

#define _DEBUG 1

さらに、このような「フラグ」マクロの場合、通常、マクロの値ではなく、マクロが定義されているかどうかをテストすることをお勧めします。例えば、

#ifdef _DEBUG
于 2012-09-24T23:33:29.390 に答える
3

そのはず

#define textToBeReplaced ReplacementText

コンパイラはすべてのコードを調べて、textToBeReplaced のすべてのインスタンスを replacementText に置き換えます。

あなたの場合、それは

#define _debug 1


別の注意点として、あなたの

    #if(_debug==1)

する ことができます

    #ifdef _debug

ここで 1 がまったく機能しないことに注意してください。これは、実際にできることを意味します

    #define _debug

何にも設定しないでください

于 2012-09-24T23:38:21.817 に答える