Boolean in ifdef: is “#ifdef A && B” the same as “#if defined(A) && defined(B)”?

后端 未结 5 401
慢半拍i
慢半拍i 2020-12-13 03:18

In C++, is this:

#ifdef A && B

the same as:

#if defined(A) && defined(B)

?

I was

相关标签:
5条回答
  • 2020-12-13 03:41

    As of VS2015 none of the above works. The correct directive is:

    #if (MAX && !MIN)
    

    see more here

    0 讨论(0)
  • 2020-12-13 03:43

    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.

    0 讨论(0)
  • 2020-12-13 03:48

    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
    
    0 讨论(0)
  • 2020-12-13 03:51

    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
    
    0 讨论(0)
  • 2020-12-13 03:57

    Conditional Compilation

    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
    
    0 讨论(0)
提交回复
热议问题