Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 代币=&引用;在预处理器表达式中无效_C++_G++_C Preprocessor - Fatal编程技术网

C++ 代币=&引用;在预处理器表达式中无效

C++ 代币=&引用;在预处理器表达式中无效,c++,g++,c-preprocessor,C++,G++,C Preprocessor,我有一个计划: #include <iostream> #define _DEBUG = 1 using namespace std; int main() { #if (_DEBUG == 1) cout << "hello : " <<endl; #endif return 0; } 我认为==是等式条件运算符?只是一个输入错误,我认为: #define _DEBUG

我有一个计划:

#include <iostream>

#define _DEBUG = 1

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

        return 0;
}
我认为
==
是等式条件运算符?

只是一个输入错误,我认为:

#define _DEBUG = 1
应该是

#define _DEBUG 1
#define textToBeReplaced ReplacementText
我一直都这么做

#define _DEBUG = 1
这将
\u DEBUG
声明为一个宏,该宏扩展为
=1
,因此当它在条件表达式中展开时,您将得到

#if (= 1 == 1)
这显然不是一个有效的条件表达式。您需要从宏定义中删除
=

#define _DEBUG 1
此外,对于这样的“标志”宏,通常最好测试宏是否已定义,而不是宏的值是什么。比如说,

#ifdef _DEBUG
应该是

#define _DEBUG 1
#define textToBeReplaced ReplacementText
编译器将检查您的所有代码,并用replacementText替换TextToBeReplace的所有实例

在你的情况下是这样的

#define _debug 1

另一方面

    #if(_debug==1)
应该是

    #ifdef _debug
注意到1在这里从来没有起作用吗?这意味着你实际上可以这样做

    #define _debug

不要将其设置为任何值

不要使用以下划线和另一个下划线或大写字母开头的名称;它们是为实现而保留的,可以按照它们的意愿进行处理。这意味着您对
\u DEBUG
的使用可能会与系统标题中的某些内容发生冲突,而出错的可能是您的代码。实际上,通常最好不要创建以下划线开头的名称。@JonathanLeffler-有点怪:保留标识符是以下划线开头,后跟大写字母的名称,以及包含两个连续下划线的名称。因此,例如,<代码> Ayb b < /COD>是保留的,以及<代码> PeteBecker,代码> > @:您是正确的,包含双下划线的名称也保留在C++中。我倾向于将其视为与“不要以下划线开始标识符”不同的一条规则,尤其是因为C没有双下划线限制。“应该”有点强;'“可能”是正确的。它们可能有
#define(定义)DEBUG 2
,在这种情况下,
(定义)DEBUG==1
的测试可能是正确的。好的一点是,这对多个级别的调试非常有用,而且对任何人都没有好处,在我看来,这个实例是一个非常常见的错误,并且在生成的错误消息中保持一致,以保证保留。