2010-08-02 14 views
44

¿Me pregunto si es posible tener un preprocesador O o declaración AND? Tengo este código donde quiero ejecutar bajo las etiquetas _DEBUG o _UNIT_TEST (?).¿Se pueden usar operadores booleanos con el preprocesador?

Lo que quiero es algo como lo siguiente:

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

Si esto no es posible, ¿hay una solución para lograr lo mismo sin tener que duplicar el código utilizando un #elseif?

Respuesta

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

Puede utilizar los operadores AND y NOT también. Por ejemplo:

#if !defined _DEBUG && defined _UNIT_TEST 
    //Code here 
#endif 
3
#if defined(_DEBUG) || defined(_UNIT_TEST) 
    //Code here 
#endif 

También para el registro, es #elif, no #elseif.

6

#if toma cualquier C++ expresión del tipo integral (1) que el compilador logra evaluar en tiempo de compilación. Así que sí, puede usar || y &&, siempre que use defined(SOMETHING) para probar la definición.

(1): bueno, es un poco más restringido que eso; para los detalles, consulte las restricciones here (en "con estas restricciones adicionales").

Cuestiones relacionadas