Ho un pezzo di codice che voglio includere se uno dei due macro sono definiteUtilizzo di operatori logici con le macro
#ifdef MACRO1 || MACRO2
void foo()
{
}
#endif
Come compire questo in C?
Ho un pezzo di codice che voglio includere se uno dei due macro sono definiteUtilizzo di operatori logici con le macro
#ifdef MACRO1 || MACRO2
void foo()
{
}
#endif
Come compire questo in C?
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
#if defined(Macro 1) + defined(Macro 2) == 1
<Code>
#endif
Ecco la versione non in caso di necessità: [! E un mini demo]
#if !defined(MACRO1) && !defined(MACRO2)
...
#endif
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
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