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.
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.
Antworten:
Sie sind nicht gleich. Der erste funktioniert nicht (ich habe in gcc 4.4.1 getestet). Fehlermeldung war:
test.cc:1:15: Warnung: Zusätzliche Token am Ende der Direktive #ifdef
Wenn Sie überprüfen möchten, ob mehrere Dinge definiert sind, verwenden Sie die zweite.
Sie können den definierten Operator in der Direktive #if verwenden, um Ausdrücke zu verwenden, die innerhalb einer Präprozessorzeile 0 oder 1 ergeben. Dies erspart Ihnen die Verwendung verschachtelter Vorverarbeitungsanweisungen. Die Klammern um den Bezeichner sind optional. Zum Beispiel:
#if defined (MAX) && ! defined (MIN)
Ohne den definierten Operator müssten Sie die folgenden zwei Anweisungen einschließen, um das obige Beispiel auszuführen:
#ifdef max #ifndef min
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
#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
Ab VS2015 funktioniert keines der oben genannten. Die richtige Anweisung lautet:
#if (MAX && !MIN)
Sehen Sie hier mehr