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
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