Некорректная работа Ifdef elif

Коллеги, добрый день, подскажите пожалуйста, почему у меня не выполняется условие elif?

#include <iostream>
#define debug

int main()
{
#ifdef DEBUG
    std::cout << "DEBUG";
#elif debug
    std::cout << "debug"; // Не выполняется
#else 
    std::cout << "else"; // А вот что выполняется в этом случае
#endif

}

Ответы (2 шт):

Автор решения: Harry

Можно так:

#ifdef DEBUG
    std::cout << "DEBUG";
#elif defined(debug)
    std::cout << "debug"; // Не выполняется
#else 
    std::cout << "else"; // А вот что выполняется в этом случае
#endif

Или, для единообразия:

#if defined(DEBUG)
    std::cout << "DEBUG";
#elif defined(debug)
    std::cout << "debug"; // Не выполняется
#else 
    std::cout << "else"; // А вот что выполняется в этом случае
#endif

Или так:

#define debug 1

int main()
{
#ifdef DEBUG
    std::cout << "DEBUG";
#elif debug
    std::cout << "debug"; // Не выполняется
#else 
    std::cout << "else"; // А вот что выполняется в этом случае
#endif

}

А просто #if debug, которое превращается в #if без ничего — вообще не должно компилироваться, по большому счету... VC++ его и не компилирует.

→ Ссылка
Автор решения: AR Hovsepyan

Что означают команды?

  1. #ifdef DEBUG _ если определено выражение DEBUG
  2. #elif debug _ иначе, если debug что эквивалентно: иначе, если debug есть true, а у вас это выражение определено, но оно не означает какое то значение. Вам предлагают варианты:

#define debug 1 означает что debug есть число 1, которое отлично от нуля, а значит в условиях, воспринимается как истина. Или же изменение команды препроцессора на #elif defined(debug) что означает: иначе, если определено выражение debug. А ваше выражение "С Ifdef все прекрасно работает и без 0, 1" абсолютно не понятно. Не просто работа важна, а важна правильная работа, соответствующая вашим желаниям и ожиданиям. А для этого вы должны дать подходящие команды, и никто кроме вас не знает что вы хотите, вот и предложили два разных варианта.

→ Ссылка