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

hig*_*dth 4 c++ g++ c-preprocessor

我有一个程序:

#include <iostream>

#define _DEBUG = 1

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

        return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译它会给出错误:

$ 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
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ens 9

我认为只是一个错字:

#define _DEBUG = 1
Run Code Online (Sandbox Code Playgroud)

应该

#define _DEBUG 1
Run Code Online (Sandbox Code Playgroud)

我一直这样做!

  • 对于任何人[清理拼写错误问题](http://meta.stackexchange.com/q/167342),这个实例在我看来是一个错误,这个错误在所产生的错误消息中足够常见且一致,以保证保留. (2认同)

Jam*_*lis 8

#define _DEBUG = 1
Run Code Online (Sandbox Code Playgroud)

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

#if (= 1 == 1)
Run Code Online (Sandbox Code Playgroud)

这显然不是一个有效的条件表达式.您需要=从宏定义中删除:

#define _DEBUG 1
Run Code Online (Sandbox Code Playgroud)

另外,对于像这样的"标志"宏,通常最好测试是否定义了宏,而不是宏的值是什么.例如,

#ifdef _DEBUG
Run Code Online (Sandbox Code Playgroud)