【发布时间】:2012-09-24 23:30:22
【问题描述】:
我有一个程序:
#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
我认为== 是相等条件运算符?
【问题讨论】:
-
不要使用以下划线和另一个下划线或大写字母开头的名称;它们被保留用于按照他们的意愿执行。这意味着您对
_DEBUG的使用可能会与系统标头中的某些内容发生冲突,这将是您的代码有问题。实际上,通常最好不要创建以下划线开头的名称。 -
@JonathanLeffler - 有点意思:保留标识符是以下划线开头的名称,后跟一个大写字母,以及包含两个连续下划线的名称。因此,例如,
A__B和__AB是保留的。 -
@PeteBecker:你说得对,包含双下划线的名称在 C++ 中也是保留的。我倾向于将其视为与“不要以下划线开头的标识符”分开的规则,尤其是因为 C 没有双下划线限制。
标签: c++ g++ c-preprocessor