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)
我以为==是等式条件运算符?
我认为只是一个错字:
#define _DEBUG = 1
Run Code Online (Sandbox Code Playgroud)
应该
#define _DEBUG 1
Run Code Online (Sandbox Code Playgroud)
我一直这样做!
#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)