Токен & quot; = & quot; недопустимо в выражениях препроцессора

У меня есть программа:

#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

я думал == такое оператор равенства?

3

Решение

Просто опечатка, я думаю:

#define _DEBUG = 1

должно быть

#define _DEBUG 1

Я делаю это все время!

8

Другие решения

#define _DEBUG = 1

Это заявляет _DEBUG как макрос, который расширяется до = 1Таким образом, когда он раскрывается в вашем условном выражении, вы получаете

#if (= 1 == 1)

что явно не является допустимым условным выражением. Вы должны удалить = из определения макроса:

#define _DEBUG 1

Кроме того, для таких «макросовых» макросов обычно хорошей идеей является проверка того, определен ли макрос, а не его значение. Например,

#ifdef _DEBUG
8

Так должно быть

#define textToBeReplaced ReplacementText

Компилятор проверит весь ваш код и заменит все экземпляры textToBeReplaced на replaceText.

В вашем случае это будет

#define _debug 1

На другой ноте ваш

    #if(_debug==1)

должен может быть

    #ifdef _debug

Заметьте, как 1 никогда не входит в игру здесь? это означает, что вы можете просто сделать

    #define _debug

и не устанавливать его ни к чему

3