que - diferencia entre#if defined(WIN32) y#ifdef(WIN32)
para que se usa#ifndef (3)
Si usa la sintaxis #ifdef, elimine los corchetes.
La diferencia entre los dos es que #ifdef
solo puede usar una sola condición,
mientras que #if defined(NAME)
puede hacer compuestos condicionales.
Por ejemplo en tu caso:
#if defined(WIN32) && !defined(UNIX)
/* Do windows stuff */
#elif defined(UNIX) && !defined(WIN32)
/* Do linux stuff */
#else
/* Error, both can''t be defined or undefined same time */
#endif
Estoy compilando mi programa que se ejecutará en linux gcc 4.4.1 C99.
Solo estaba colocando mis #defines para separar el código que se compilará en Windows o Linux. Sin embargo, obtuve este error.
error: macro names must be identifiers.
Usando este código
#ifdef(WIN32)
/* Do windows stuff
#elif(UNIX)
/* Do linux stuff */
#endif
Sin embargo, cuando cambié a esto, se solucionó el error:
#if defined(WIN32)
/* Do windows stuff
#elif(UNIX)
/* Do linux stuff */
#endif
Me preguntaba por qué obtuve ese error y por qué #defines son diferentes.
Muchas gracias,
#ifdef
comprueba si se ha definido una macro con ese nombre, #if
evalúa la expresión y comprueba si hay un valor verdadero
#define FOO 1
#define BAR 0
#ifdef FOO
#ifdef BAR
/* this will be compiled */
#endif
#endif
#if BAR
/* this won''t */
#endif
#if FOO || BAR
/* this will */
#endif
#ifdef FOO
y
#if defined(FOO)
son lo mismo,
pero para hacer varias cosas a la vez, puede usar definido, como
#if defined(FOO) || defined(BAR)