Reputation: 14599
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).
Upvotes: 99
Views: 128045
Reputation: 21
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
Upvotes: 1
Reputation: 1
As of VS2015 none of the above works. The correct directive is:
#if (MAX && !MIN)
see more here
Upvotes: -3
Reputation: 59
The following results are the 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
Upvotes: 4
Reputation: 21670
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
Upvotes: 55
Reputation: 90483
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.
Upvotes: 103