web-dev-qa-db-fra.com

Les opérateurs booléens peuvent-ils être utilisés avec le préprocesseur?

Je me demande s'il est possible d'avoir un préprocesseur OR ou instruction AND? J'ai ce code là où je veux courir sous _DEBUG ou _UNIT_TEST Mots clés(?).

Ce que je veux, c'est quelque chose comme ceci:

#if _DEBUG || _UNIT_TEST
  //Code here
#endif

Si cela n'est pas possible, existe-t-il une solution de contournement pour obtenir la même chose sans avoir à dupliquer le code à l'aide d'un #elseif?

62
Wesley
#if defined _DEBUG || defined _UNIT_TEST 
  //Code here 
#endif 

Vous pouvez également utiliser les opérateurs AND et NOT. Par exemple:

#if !defined _DEBUG && defined _UNIT_TEST 
  //Code here 
#endif 
83

#if Prend toute expression C++ de type intégral (1) que le compilateur parvient à évaluer au moment de la compilation. Donc oui, vous pouvez utiliser || Et &&, Tant que vous utilisez defined(SOMETHING) pour tester la définition.

(1): eh bien, c'est un peu plus restreint que ça; pour les détails, voir les restrictions ici "avec ces restrictions supplémentaires" ).

10
Roman Starkov
#if defined(_DEBUG) || defined(_UNIT_TEST)
  //Code here
#endif

Pour mémoire, c'est #Elif, ne pas #elseif.

6
AshleysBrain