usa que para not indef ifdef__ ifdef endif elseif avr__ c

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)