webentwicklung-frage-antwort-db.com.de

Boolean in ifdef: Stimmt "#ifdef A && B" mit "#if defined (A) && defined (B)" überein?

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) finden.

75
criddell

Sie sind nicht gleich. Das erste funktioniert nicht (ich habe es in gcc 4.4.1 getestet). Fehlermeldung war:

test.cc:1:15: Warnung: Zusätzliche Token bei Ende der # ifdef-Direktive

Wenn Sie prüfen möchten, ob mehrere Elemente definiert sind, verwenden Sie das zweite.

79
Evan Teran

Bedingte Kompilierung

Sie können den definierten Operator in .__ verwenden. Die # if-Direktive zur Verwendung von Ausdrücken die auf 0 oder 1 innerhalb einer .__ ausgewertet werden. Präprozessorzeile. Dies erspart Sie vor unter Verwendung verschachtelter Vorverarbeitungsrichtlinien . Die Klammern um den Bezeichner sind optional. Zum Beispiel:

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

Ohne den definierten Operator zu verwenden, Sie müssten das .__ angeben. folgende zwei Anweisungen auszuführen das obige Beispiel:

#ifdef max 
#ifndef min
43

Die folgenden Ergebnisse sind die gleichen:

1.

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

2.

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

Für diejenigen, die beispielsweise nach UNIX/g ++ suchen, das sich etwas vom OP unterscheidet, kann dies hilfreich sein:

`

#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
0
MikeB