Некорректная работа 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 шт):
Можно так:
#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++ его и не компилирует.
Что означают команды?
- #ifdef DEBUG _ если определено выражение DEBUG
- #elif debug _ иначе, если debug что эквивалентно: иначе, если debug есть true, а у вас это выражение определено, но оно не означает какое то значение. Вам предлагают варианты:
#define debug 1 означает что debug есть число 1, которое отлично от нуля, а значит в условиях,
воспринимается как истина. Или же изменение команды препроцессора на #elif defined(debug) что означает: иначе, если определено выражение debug.
А ваше выражение "С Ifdef все прекрасно работает и без 0, 1" абсолютно не понятно. Не просто работа важна, а важна правильная работа, соответствующая вашим желаниям и ожиданиям. А для этого вы должны дать подходящие команды, и никто кроме вас не знает что вы хотите, вот и предложили два разных варианта.