令牌“=”在预处理器表达式中无效

时间:2012-09-24 23:30:22

标签: c++ g++ c-preprocessor

我有一个程序:

#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

我认为==是等式条件运算符?

3 个答案:

答案 0 :(得分:8)

我认为只是一个错字:

#define _DEBUG = 1

应该是

#define _DEBUG 1

我一直这样做!

答案 1 :(得分:8)

#define _DEBUG = 1

这会将_DEBUG声明为扩展为= 1的宏,因此当它在条件表达式中展开时,您会得到

#if (= 1 == 1)

显然不是有效的条件表达式。您需要从宏定义中删除=

#define _DEBUG 1

此外,对于&#34; flag&#34;像这样的宏,通常是一个好主意,测试是否定义宏,而不是宏的值。例如,

#ifdef _DEBUG

答案 2 :(得分:3)

应该是

#define textToBeReplaced ReplacementText

编译器将遍历您的所有代码,并用replaceText替换textToBeReplaced的所有实例。

在你的情况下,它将是

#define _debug 1

另一个注意事项

    #if(_debug==1)

应该可以

    #ifdef _debug

注意1在这里怎么没有发挥作用?这意味着你实际上可以做到

    #define _debug

并没有将其设置为任何内容