usa que para libreria ifdef example bibliotecas c-preprocessor

c-preprocessor - para - que es#ifdef en c



El rol de#ifdef y#ifndef (3)

"#if one" significa que si se ha escrito "#define one" "#if one" se ejecuta de lo contrario "#ifndef one" se ejecuta.

Esto es simplemente el equivalente de la Directiva Preprocesador (CPP) de las declaraciones de ramificación if, then else en el lenguaje C.

es decir, si {#define one} luego printf ("uno evalúa a verdad"); else printf ("uno no está definido"); por lo tanto, si no hubiera una sentencia #define one, se ejecutaría la rama else de la instrucción.

#define one 0 #ifdef one printf("one is defined "); #ifndef one printf("one is not defined ");

En esto, ¿cuál es el papel de #ifdef y #ifndef , y cuál es el resultado?


Alguien debería mencionar que en la pregunta hay una pequeña trampa. #ifdef solo comprobará si el siguiente símbolo se ha definido mediante #define o por línea de comando, pero su valor (su sustitución, de hecho) es irrelevante. Incluso podrías escribir

#define one

precompiladores aceptan eso. Pero si usa #if si es otra cosa.

#define one 0 #if one printf("one evaluates to a truth "); #endif #if !one printf("one does not evaluate to truth "); #endif

dará one does not evaluate to truth . La palabra clave defined permite obtener el comportamiento deseado.

#if defined(one)

es por lo tanto equivalente a #ifdef

La ventaja de la construcción #if es permitir un mejor manejo de las rutas de código, intenta hacer algo como eso con el viejo par #ifdef / #ifndef .

#if defined(ORA_PROC) || defined(__GNUC) && __GNUC_VERSION > 300


El ifndef/endif dejará o eliminará el texto dentro de un par ifndef/endif ifdef/endif o ifndef/endif dependiendo de la condición. ifdef significa "si se define lo siguiente" mientras que ifndef significa "si lo siguiente no está definido".

Asi que:

#define one 0 #ifdef one printf("one is defined "); #endif #ifndef one printf("one is not defined "); #endif

es equivalente a:

printf("one is defined ");

ya que one se define así que el ifdef es verdadero y el ifndef es falso. No importa lo que se define como . Una pieza de código similar (mejor en mi opinión) a eso sería:

#define one 0 #ifdef one printf("one is defined "); #else printf("one is not defined "); #endif

ya que eso especifica la intención más claramente en esta situación particular.

En su caso particular, el texto después del ifdef no se elimina ya que one está definido. El texto después del ifndef se elimina por el mismo motivo. endif haber dos líneas de cierre endif en algún punto y la primera hará que las líneas comiencen a incluirse nuevamente, de la siguiente manera:

#define one 0 +--- #ifdef one | printf("one is defined "); // Everything in here is included. | +- #ifndef one | | printf("one is not defined "); // Everything in here is excluded. | | : | +- #endif | : // Everything in here is included again. +--- #endif