In C ++ ist dies:
#ifdef A && B
das Gleiche wie:
#if defined(A) && defined(B)
?
Ich dachte, es wäre nicht so, aber ich konnte keinen Unterschied zu meinem Compiler (VS2005) feststellen.
c++
c-preprocessor
conditional-compilation
Criddell
quelle
quelle
Antworten:
Sie sind nicht gleich. Der erste funktioniert nicht (ich habe in gcc 4.4.1 getestet). Fehlermeldung war:
Wenn Sie überprüfen möchten, ob mehrere Dinge definiert sind, verwenden Sie die zweite.
quelle
Bedingte Kompilierung
quelle
Die folgenden Ergebnisse sind gleich:
1.
#define A #define B #if(defined A && defined B) printf("define test"); #endif
2.
#ifdef A #ifdef B printf("define test"); #endif #endif
quelle
#else
, können ein Problem verursachen. Nur die erste Option bedeutet genau das, wonach der Fragesteller gefragt hat.Für diejenigen, die zum Beispiel (UNIX / g ++) suchen, das sich ein wenig vom OP unterscheidet, kann dies helfen:
`
#if(defined A && defined B && defined C) const string foo = "xyz"; #else #if(defined A && defined B) const string foo = "xy"; #else #if(defined A && defined C) const string foo = "xz"; #else #ifdef A const string foo = "x"; #endif #endif #endif #endif
quelle
Ab VS2015 funktioniert keines der oben genannten. Die richtige Anweisung lautet:
#if (MAX && !MIN)
Sehen Sie hier mehr
quelle