Boolean in ifdef: is "#ifdef A && B" the same as "#if defined(A) && defined(B)"?
C++C PreprocessorConditional CompilationC++ Problem Overview
In C++, is this:
#ifdef A && B
the same as:
#if defined(A) && defined(B)
?
I was thinking it wasn't, but I haven't been able to find a difference with my compiler (VS2005).
C++ Solutions
Solution 1 - C++
They are not the same. The first one doesn't work (I tested in gcc 4.4.1). Error message was:
> test.cc:1:15: warning: extra tokens at > end of #ifdef directive
If you want to check if multiple things are defined, use the second one.
Solution 2 - C++
> You can use the defined operator in
> the #if directive to use expressions
> that evaluate to 0 or 1 within a
> preprocessor line. This saves you from
> using nested preprocessing directives.
> The parentheses around the identifier
> are optional. For example:
>
>
> #if defined (MAX) && ! defined (MIN)
>
> Without using the defined operator,
> you would have to include the
> following two directives to perform
> the above example:
>
> #ifdef max
> #ifndef min
Solution 3 - C++
The following results are the same:
#define A
#define B
#if(defined A && defined B)
printf("define test");
#endif
2.
#ifdef A
#ifdef B
printf("define test");
#endif
#endif
Solution 4 - C++
For those that might be looking for example (UNIX/g++) that is a little different from the OP, this may help:
`
#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