Estoy comstackndo mi progtwig que se ejecutará en linux gcc 4.4.1 C99.
Estaba poniendo mis #defines para separar el código que se comstackrá en Windows o Linux. Sin embargo, tengo este error.
error: macro names must be identifiers.
Usando este codigo
#ifdef(WIN32) /* Do windows stuff #elif(UNIX) /* Do linux stuff */ #endif
Sin embargo, cuando cambié a esto el error fue corregido:
#if defined(WIN32) /* Do windows stuff #elif(UNIX) /* Do linux stuff */ #endif
Me preguntaba por qué obtuve ese error y por qué los #defines son diferentes.
Muchas gracias,
Si utiliza la syntax de #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 condicionales compuestas.
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
#ifdef FOO
y
#if defined(FOO)
son lo mismo,
pero para hacer varias cosas a la vez, puedes usar definidas, como
#if defined(FOO) || defined(BAR)
#ifdef
comprueba si se ha definido una macro con ese nombre, #if
evalúa la expresión y busca 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