Почти во всех языках программирования или синтаксисе, когда выполнение входит в одну ветвь условного выражения (в данном случае условное значение равно #ifdef
, даже если условие изменяется во время выполнения ветвления, другие ответвления никогда не будут выполнены .
Я уверен, что вы не ожидаете, что это напечатает "Hello", не так ли?
if (i == 1)
i = 0;
else
printf("Hello\n");
По сути, вы говорите, что код в ветви else
всегда должен выполняться, затем просто вынуть его из ветви и поместить его непосредственно в код .
И компилятор, и выполнение выполняют только один проход через условные выражения, после того как совпадение найдено, они больше не смотрят.