sirve que para ifdef example endif define c++ c-preprocessor conditional-compilation

c++ - que - ifdef c example



Boolean en ifdef: ¿es "#ifdef A && B" lo mismo que "# si está definido(A) && defined(B)"? (5)

A partir de VS2015, ninguno de los anteriores funciona. La directriz correcta es:

#if (MAX && !MIN)

ver más here

En C ++, es esto:

#ifdef A && B

lo mismo que:

#if defined(A) && defined(B)

?

Estaba pensando que no, pero no he podido encontrar la diferencia con mi compilador (VS2005).


Creo que tal vez OP quiera preguntar sobre la declaración "#if COND_A && COND_B", no "#ifdef COND_A && COND_B" ...

Ellos también son diferentes. "#if COND_A && COND_B" puede juzgar lógica expresa, así:

#if 5+1==6 && 1+1==2 .... #endif

incluso, una variable en su código también puede usarse en esta macroestatación:

int a = 1; #if a==1 ... #endif


Ellos no son los mismos. El primero no funciona (lo probé en gcc 4.4.1). El mensaje de error fue:

test.cc:1:15: advertencia: tokens adicionales al final de la directiva #ifdef

Si desea verificar si hay varias cosas definidas, use la segunda.


Los siguientes resultados son los mismos:

1.

#define A #define B #if(defined A && defined B) printf("define test"); #endif

2.

#ifdef A #ifdef B printf("define test"); #endif #endif


Compilación condicional

Puede usar el operador definido en la directiva #if para usar expresiones que se evalúan a 0 o 1 dentro de una línea de preprocesador. Esto le ahorra el uso de directivas de preproceso anidado. Los paréntesis alrededor del identificador son opcionales. Por ejemplo:

#if defined (MAX) && ! defined (MIN)

Sin utilizar el operador definido, debe incluir las dos directivas siguientes para realizar el ejemplo anterior:

#ifdef max #ifndef min