2013-08-14 16 views

risposta

13

Quando il preprocessore interpreta

#if THREADMODEL==NOASC 

sostituirà THREADMODEL con ASC:

#if ASC==NOASC 

A meno che non si dispone di #define d ASC e NOASC di avere valori numerici, il preprocessore li sostituirà con valori 0 (prende qualsiasi simbolo indefinito e li sostituisce con 0):

#if 0==0 

Questo quindi valuta 1 e quindi il preprocessore valuterà il blocco.

Per risolvere questo problema, provare a dare diversi valori numerici per ASC e NOASC, in questo modo:

#define ASC 0 
#define NOASC (1 + (ASC)) 

Spero che questo aiuti!

+0

Grazie mille! Bella risposta! –

+0

È meglio separare completamente le definizioni di macro che si espandono in espressioni: '#define NOASC (1 + ASC)' –

+0

@KeithThompson Buona cattura - Mi sono ricordato di parentesi con 'ASC', ma non l'espressione risultante. – templatetypedef