2012-12-04 14 views

risposta

10

Oltre #ifdef, il preprocessore supporta la più generale #if istruzione; in realtà, #ifdef MACRO è una scorciatoia per #if defined(MACRO), dove defined è una "funzione di preprocessore" che restituisce 1 se la macro è definita; così, si può fare:

#if defined(MACRO1) || defined(MACRO2) 

void foo() 
{ 


} 

#endif 
+0

Che cosa è il problema nel codice qui sotto? Qual è l'alternativa nel caso in cui questo tipo di utilizzo non sia corretto? #define CUSTOM_METHOD 1 # definisce ARDUINO_METHOD 2 #define TIMER_DELAY_METHOD CUSTOM_METHOD #if defined (TIMER_DELAY_METHOD! = CUSTOM_METHOD) || definito (TIMER_DELAY_METHOD! = ARDUINO_METHOD) #Error "Nessun metodo timer viene definito" #endif // definito – Rajesh

+0

Penso che ho avuto e seguente codice sembra funzionare # define CUSTOM_METHOD 1 # define ARDUINO_METHOD 2 #define NESSUNO 3 #define TIMER_DELAY_METHOD NONE #if (TIMER_DELAY_METHOD! = CUSTOM_METHOD) && (TIMER_DELAY_METHOD! = ARDUINO_METHOD) #Error "Nessun metodo timer viene definito" #endif // definito – Rajesh

4
#if defined(MACRO1) || defined(MACRO2) 
+0

(http://ideone.com/Swdum3) – Cornstalks

0
#if defined(Macro 1) + defined(Macro 2) == 1 
    <Code> 
    #endif 
2

Ecco la versione non in caso di necessità: [! E un mini demo]

#if !defined(MACRO1) && !defined(MACRO2) 
... 
#endif 
Problemi correlati