2009-06-08 11 views
41

J'ai cherché sur le site mais je n'ai pas trouvé la réponse que je recherchais, alors voici une question très rapide.C Définition du test du préprocesseur de plusieurs macros

Je suis en train de faire quelque chose comme ça:

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

Comment puis-je faire une telle chose? Je sais que _WIN32 est défini pour les fenêtres 32 et 64 bits, donc je serais d'accord avec l'une ou l'autre pour la détection des fenêtres. Je suis plus intéressé de savoir si je peux utiliser des opérateurs logiques comme ça avec des directives de préprocesseur, et si oui comment, puisque ce qui précède ne fonctionne pas.

utilise gcc je reçois:

avertissement: jetons supplémentaires à la fin de la directive #ifdef, et il faut essentiellement que la première MACRO et ignore le reste.

Répondre

63

Essayez:

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

Les defined macro teste si oui ou non un nom est défini et vous permet d'appliquer des opérateurs logiques au résultat .

+1

Les parenthèses sont optionnelles –

+1

Merci, vous aviez raison. Exactement ce que je cherchais. Cela fonctionne bien :) – Lefteris

3

Vous devez utiliser « si elle est définie » plutôt que « ifdef »

#if defined _WIN32 || defined _WIN64 

oops faute de frappe, vous devez le deuxième « défini » qui est la raison pour laquelle votre test échoue. Pensez comme « _WIN32 défini » étant une seule instruction renvoyant true/false

+2

parens sont facultatif, mais le second n'est pas défini. :) –

+0

Désolé - en particulier car c'était exactement ce qui n'allait pas avec le code OP! –

3

Je pense qu'il devrait être possible de cette façon:

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

Plus d'informations here

6

Vous devez utiliser #if et opérateur spécial defined

0

Utilisation définie:

#if defined(A) || defined(B) 
    #include <whatever.h> 
#endif 
Questions connexes