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 回答