2009-06-08 12 views
41

Ich suchte die Website, aber fand nicht die Antwort, die ich suchte, also hier ist eine wirklich schnelle Frage.C Präprozessor Test Definiertheit von mehreren Makros

Ich versuche, so etwas zu tun:

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

Wie kann ich so etwas tun? Ich weiß, dass _WIN32 sowohl für 32-Bit- als auch für 64-Bit-Fenster definiert ist, so dass ich mit beiden für die Windows-Erkennung okay wäre. Ich bin mehr daran interessiert, ob ich logische Operatoren wie diese mit Präprozessordirektiven verwenden kann, und wenn ja wie, da das obige nicht funktioniert.

mit gcc kompilieren, erhalte ich:

Warnung: zusätzliche Token am Ende der #ifdef Richtlinie, und es dauert im Grunde nur die erste MACRO und ignoriert den Rest.

Antwort

63

Try Rückkehr:

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

Die defined Makro-Tests, ob ein Name definiert ist, und können Sie logische Operatoren auf das Ergebnis anwenden .

+1

Die Klammern sind optional –

+1

Vielen Dank, Sie hatten Recht. Genau das, was ich gesucht habe. Das funktioniert gut :) – Lefteris

3

Sie müssen verwenden ‚wenn definiert‘ und nicht ‚ifdef‘

#if defined _WIN32 || defined _WIN64 

oops Tippfehler, müssen Sie die zweite ‚definiert‘, das ist, warum Ihr Test nicht bestehen wird. Betrachten Sie es als ‚definiert _WIN32‘ eine einzige Aussage wahr/falsch

+2

Parens sind optional, aber die zweite definiert ist nicht. :) –

+0

Sorry - besonders weil genau das mit dem OP-Code nicht stimmte! –

3

ich denke, es möglich sein sollte, auf diese Weise:

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

Weitere Informationen here

0

Verwendung definiert:

#if defined(A) || defined(B) 
    #include <whatever.h> 
#endif 
Verwandte Themen