Что вам не хватает, так это то, что директивы препроцессора вычисляются до времени компиляции.
Это означает, что, когда препроцессор анализирует ваш код, он:
- Устанавливает TEST1
- Unsets TEST1
- Sets TEST2
- Unsets TEST2
- Проверяет, определен ли TEST1 (не определен)
- Проверяет, определен ли TEST2 (он не)
- Проверяет, определен ли ЗДЕСЬ (это не так)
Это означает, что testFunc
становится:
void testFunc() {
myval = -1;
}
И затем, после При этой предварительной обработке ваш код компилируется.
Я бы подумал об использовании чего-то другого, кроме препроцессора, для достижения sh того, чего вы пытаетесь достичь.