Dlaczego ten kod nie kompiluje? Jeśli dobrze rozumiem, to powinno się skompilować. Gdzie się mylę?Zrozumienie dyrektyw preprocesora
#define THREADMODEL ASC
#if THREADMODEL==NOASC
THIS BLOCK SHOULDN'T BE COMPILED
#endif
int main() {
}
Dlaczego ten kod nie kompiluje? Jeśli dobrze rozumiem, to powinno się skompilować. Gdzie się mylę?Zrozumienie dyrektyw preprocesora
#define THREADMODEL ASC
#if THREADMODEL==NOASC
THIS BLOCK SHOULDN'T BE COMPILED
#endif
int main() {
}
Gdy preprocesor interpretuje
#if THREADMODEL==NOASC
zastąpi THREADMODEL
z ASC
:
#if ASC==NOASC
Chyba że masz #define
d ASC
i NOASC
mieć wartości numerycznych, preprocesor będzie je zastąpić z wartościami 0 (przyjmuje nieokreślone symbole i zastępuje je 0):
#if 0==0
To następnie ocenia na 1
, a więc preprocesor oceni blok.
Aby rozwiązać ten problem, spróbuj dając różne wartości numerycznych ASC
i NOASC
, tak:
#define ASC 0
#define NOASC (1 + (ASC))
nadzieję, że to pomaga!
Wielkie dzięki! Świetna odpowiedź! –
Najlepiej jest w pełni sformatować definicje makr, które rozszerzają się do wyrażeń: '#define NOASC (1 + ASC)' –
@KeithThompson Dobry połów - przypomniałem sobie, że nawiasyzuję 'ASC', ale nie wyrażenie wynikowe. – templatetypedef