2013-08-14 14 views

Odpowiedz

13

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!

+0

Wielkie dzięki! Świetna odpowiedź! –

+0

Najlepiej jest w pełni sformatować definicje makr, które rozszerzają się do wyrażeń: '#define NOASC (1 + ASC)' –

+0

@KeithThompson Dobry połów - przypomniałem sobie, że nawiasyzuję 'ASC', ale nie wyrażenie wynikowe. – templatetypedef