[C con Clase] Macros y compilación condicional

Steven Davidson srd4121 en njit.edu
Mar Nov 30 17:02:19 CET 2010


Hola User,

On 11/30/10, User <usuarioanonimomysql en gmail.com> wrote:
> Hola,
>
> Yo no uso paréntesis y no tengo problema alguno, ¿son necesarios? Gracias

Siempre que lo he visto usar, se colocaban paréntesis. Sin embargo, al
no ser estándar, supongo que cada compilador (o precompilador) puede
aceptar la sintaxis que quiera.

> por aclarar que el uso de defined no es estándar. ¿Hay algún equivalente
> estandar que se pueda aplicar para hacer un or en la condición de las
> macros?
>

No hay operadores con #ifdef ni #ifndef. Lo que sí puedes hacer es
expresar lo que quieres de otra manera. Como quieres una lógica de
tipo OR con los negativos de sus operandos,

NOT( A ) OR NOT( B ),

entonces puedes expresar esto como su equivalente con AND, como
establecen las leyes de De Morgan; esto es,

NOT( A ) OR NOT( B ) = NOT( A AND B )

En tu caso, esto sería,

#ifdef macro1
  #ifdef macro2
  #else
    // Hacer aquí lo que quieres
  #endif
#else
  // Hacer aquí lo que quieres - idéntico a la parte anterior
#endif

Podemos reescribir lo anterior para aclarar la lógica y quizás
optimizar un poco; esto sería,

#ifndef macro1
  // Hacer aquí lo que quieres
#else
  #ifndef macro2
    // Hacer aquí lo que quieres - idéntico a la parte anterior
  #endif
#endif


Espero que esto aclare la duda.

Steven




Más información sobre la lista de distribución Cconclase