2009-06-08 22 views
41

Ho cercato il sito ma non ho trovato la risposta che cercavo, quindi ecco una domanda molto veloce.C Definizione del test del preprocessore di più macro

io sto cercando di fare qualcosa di simile:

#ifdef _WIN32 || _WIN64 
    #include <conio.h> 
#endif 

Come posso fare una cosa simile? So che _WIN32 è definito per entrambe le finestre a 32 e 64 bit, quindi sarei a posto per il rilevamento di Windows. Sono più interessato a sapere se posso usare gli operatori logici come quello con le direttive del preprocessore, e se sì come, dato che quanto sopra non funziona.

compilazione con gcc ottengo:

avvertimento: gettoni extra alla fine della direttiva #ifdef, ed è fondamentalmente solo prende il primo MACRO e ignora il resto.

risposta

63

Prova:

#if defined(_WIN32) || defined(_WIN64) 
// do stuff 
#endif 

Le defined prove macro se un nome è definito e consente di applicare operatori logici per il risultato .

+1

Le parentesi sono opzionali –

+1

Grazie, avevi ragione. Esattamente quello che stavo cercando. Funziona bene :) – Lefteris

3

È necessario utilizzare 'se definita' piuttosto che 'ifdef'

#if defined _WIN32 || defined _WIN64 

oops errore di battitura, è necessario il secondo 'definito' è per questo che il test sta venendo a mancare. pensare ad esso come '_WIN32 definito' essere una singola istruzione restituendo vero/falso

+2

Parens sono facoltativo, ma il secondo definito non lo è. :) –

+0

Scusate, soprattutto perché era esattamente ciò che era sbagliato nel codice OP! –

3

penso che dovrebbe essere possibile in questo modo:

#if defined block1 || defined block2 /*or any other boolean operator*/ 
    /*Code*/ 
#endif 

Maggiori informazioni here

6

È necessario utilizzare #if e gestore speciale defined

0

Uso definito:

#if defined(A) || defined(B) 
    #include <whatever.h> 
#endif 
Problemi correlati