Я никогда не работал с #if, #ifdef, #ifndef, #else, #elif и #endif.
Просматривая некоторые исходные коды, я обнаружил, что эти директивы широко используются. Прочитал об условных препроцессорах, но не нашел подсказки вроде чем они отличаются от обычных условных операторов. Поэтому мне было интересно, в чем преимущество следующего кода:
#include<iostream>
int main()
{
int i = 0;
#if i == 0
std::cout<<"This";
#else
std::cout<<"That";
#endif
return 0;
}
через это:
#include<iostream>
int main()
{
int i = 0;
if (i == 0)
std::cout<<"This";
else
std::cout<<"That";
return 0;
}
Кроме того, когда использовать / не использовать условный препроцессор?
if
оценивается во время выполнения, а#if
оценивается до времени компиляции. - person Aiias   schedule 09.06.2013I would like to participate in a discussion about ______”, then you should not be asking here
iKishore хочет принять участие в обсуждении относительных преимуществ использования условного препроцессора. - person xaxxon   schedule 09.06.2013#if
не может работать с обычными переменными. - person Joachim Isaksson   schedule 09.06.2013int i = 1;
, и запустите их, вы увидите, что результаты совсем другие. В случае#if
i
вряд ли известен препроцессору и, таким образом, получает значение по умолчанию 0 при оценке#if i == 0
. - person Bo R   schedule 10.11.2018