У меня есть программа:
#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
я думал ==
такое оператор равенства?
Просто опечатка, я думаю:
#define _DEBUG = 1
должно быть
#define _DEBUG 1
Я делаю это все время!
#define _DEBUG = 1
Это заявляет _DEBUG
как макрос, который расширяется до = 1
Таким образом, когда он раскрывается в вашем условном выражении, вы получаете
#if (= 1 == 1)
что явно не является допустимым условным выражением. Вы должны удалить =
из определения макроса:
#define _DEBUG 1
Кроме того, для таких «макросовых» макросов обычно хорошей идеей является проверка того, определен ли макрос, а не его значение. Например,
#ifdef _DEBUG
Так должно быть
#define textToBeReplaced ReplacementText
Компилятор проверит весь ваш код и заменит все экземпляры textToBeReplaced на replaceText.
В вашем случае это будет
#define _debug 1
На другой ноте ваш
#if(_debug==1)
должен может быть
#ifdef _debug
Заметьте, как 1 никогда не входит в игру здесь? это означает, что вы можете просто сделать
#define _debug
и не устанавливать его ни к чему