43 votes

C Directives de préprocesseur et opérateurs booléens

J'ai cherché sur le site mais n'a pas trouvé la réponse que je cherchais donc, ici, est vraiment une question rapide.

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 versions 32 et 64 bits de windows donc, je serais d'accord pour windows et de détection. Je suis plus intéressé de savoir si je peux utiliser des opérateurs logiques comme ça avec les directives de préprocesseur, et si oui comment, depuis le ci-dessus ne fonctionne pas.

Merci pour toute les réponses des gens.

EDIT: j'ai oublié de dire quel est le problème avec elle. Compilation avec gcc-je obtenir :

avertissement: plus de jetons à la fin de #ifdef la directive , et qu'il est fondamentalement juste prend la première MACRO et ignore le reste.

67voto

Aaron Maenpaa Points 39173

Essayer:

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

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

7voto

cube Points 1789

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

4voto

Fernando Martin Points 264

Je pense que cela devrait être possible de cette façon:

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

Plus d'informations ici

2voto

Martin Beckett Points 60406

Vous devez utiliser 'si défini' plutôt que 'ifdef'

 #if defined _WIN32 || defined _WIN64
 

oops typo, vous avez besoin du deuxième "défini", c'est pourquoi votre test échoue. Pensez-y comme 'défini _WIN32' étant une seule déclaration retournant vrai / faux

1voto

ynimous Points 536

Utilisation définie:

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X