2009-06-08 12 views
41

Realicé una búsqueda en el sitio pero no encontré la respuesta que estaba buscando, por lo que esta es una pregunta realmente rápida.C Predeterminación de prueba del preprocesador de macros múltiples

estoy tratando de hacer algo así:

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

¿Cómo puedo hacer una cosa así? Sé que _WIN32 está definido para ventanas de 32 y 64 bits, así que estaría bien con cualquiera de las dos para la detección de Windows. Estoy más interesado en si puedo usar operadores lógicos así con las directivas de preprocesador, y si es así, ya que lo anterior no funciona.

compilación con gcc me sale:

advertencia: elementos extra al final de la directiva #ifdef, y que, básicamente, sólo se necesita la primera macro e ignora el resto.

Respuesta

63

Probar:

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

Los defined pruebas macro si es o no un nombre se define y permite aplicar operadores lógicos para el resultado .

+1

Los paréntesis son opcionales –

+1

Gracias, tenías razón. Exactamente lo que estaba buscando. Eso funciona bien :) – Lefteris

3

Debe utilizar 'si se ha definido' en lugar de 'ifdef'

#if defined _WIN32 || defined _WIN64 

Vaya error tipográfico, lo que necesita la segunda 'definido' es por eso que la prueba está fallando. pensar en él como '_WIN32 definido' ser una sola instrucción de regresar verdadero/falso

+2

Parens son opcional, pero el segundo definido no es. :) –

+0

Lo siento, especialmente porque eso era exactamente lo que estaba mal con el código OP. –

3

creo que debería ser posible de esta manera:

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

Más información here

0

uso definido:

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