Макрос с использованием #ifdef не работает

0

Я использую MACRO для определения переменной SUCESS

#ifdef SUCCESS
    #undef SUCCESS
    #define SUCCESS  0
#endif //SUCCESS

Но компилятор Eclipse дает мне ошибку, поскольку

symbol "SUCCESS" could not be resolved

Но если я просто напишу

#define SUCCESS  0

Он работает нормально. Почему это так. Мне нужно писать только с помощью #ifdef

  • 0
    вы пробовали с другой IDE?
Теги:

2 ответа

1
Лучший ответ

Если SUCCESS не задан перед этими предпроцессорными директивами, макроса SUCCESS не будет определено (что ошибка). Если вы определяете SUCCESS до этого, его значение изменится, как ожидалось:

#define SUCCESS 1

#ifdef SUCCESS
    #undef SUCCESS
    #define SUCCESS  0
#endif //SUCCESS

int main(int argc, char *argv[]) {
    std::cout << SUCCESS;
    return 0;
}

Как вы можете видеть здесь.

6

Перепишите это следующим образом:

#undef SUCCESS
#define SUCCESS 0

Таким образом, вы получите определение независимо от того, был ли ранее установлен SUCCESS. Я также удалил оболочку #ifdef... #endif. Это не нужно: #undef игнорируется, если его цель не определена.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню