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).
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).
Odpowiedzi:
One nie są takie same. Pierwsza nie działa (testowałem w gcc 4.4.1). Komunikat o błędzie:
test.cc:1:15: ostrzeżenie: dodatkowe tokeny na końcu dyrektywy #ifdef
Jeśli chcesz sprawdzić, czy zdefiniowano wiele rzeczy, użyj drugiej.
Możesz użyć operatora zdefiniowanego w dyrektywie #if, aby użyć wyrażeń, których wynikiem jest 0 lub 1 w wierszu preprocesora. Pozwala to uniknąć używania zagnieżdżonych dyrektyw wstępnego przetwarzania. Nawiasy wokół identyfikatora są opcjonalne. Na przykład:
#if defined (MAX) && ! defined (MIN)
Bez użycia zdefiniowanego operatora należałoby uwzględnić następujące dwie dyrektywy, aby wykonać powyższy przykład:
#ifdef max #ifndef min
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
#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
Od VS2015 żadne z powyższych nie działa. Prawidłowa dyrektywa to:
#if (MAX && !MIN)
zobacz więcej tutaj