我有一个程序:
#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
我认为==
是等式条件运算符?
答案 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
并没有将其设置为任何内容