W C ++ jest to:
#ifdef A && B
taki sam jak:
#if defined(A) && defined(B)
?
Myślałem, że tak nie jest, ale nie byłem w stanie znaleźć różnicy w moim kompilatorze (VS2005).
c++
c-preprocessor
conditional-compilation
criddell
źródło
źródło
Odpowiedzi:
One nie są takie same. Pierwsza nie działa (testowałem w gcc 4.4.1). Komunikat o błędzie:
Jeśli chcesz sprawdzić, czy zdefiniowano wiele rzeczy, użyj drugiej.
źródło
Kompilacja warunkowa
źródło
Następujące wyniki są takie same:
1.
#define A #define B #if(defined A && defined B) printf("define test"); #endif
2.
#ifdef A #ifdef B printf("define test"); #endif #endif
źródło
#else
, mogą powodować problem. Tylko pierwsza opcja oznacza dokładnie to, o co prosił pytający.Dla tych, którzy mogą na przykład szukać (UNIX / g ++), który różni się nieco od OP, może to pomóc:
`
#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
źródło
Od VS2015 żadne z powyższych nie działa. Prawidłowa dyrektywa to:
#if (MAX && !MIN)
zobacz więcej tutaj
źródło