Generating an error if checked boolean macro is not defined

后端 未结 5 1062
后悔当初
后悔当初 2020-12-16 12:25

I have several configuration files each one containing the definition of some boolean macro, to be set to 0 or 1. Then, in my code, I check the value of such a macro to deci

5条回答
  •  猫巷女王i
    2020-12-16 12:50

    Macro CHECK(x) will:

    • fail if macro x is undefined,
    • evaluate to 00 if x is defined to 0
    • evaluate to 01 if x is defined to 1
    $ cat main.cpp
    #define CAT(x, y) x##y
    #define CHECK(x) CAT(0, x)
    
    // usage
    
    #define COND0 0
    #define COND1 1
    
    #if CHECK(COND)
    #endif
    
    #if CHECK(COND0)
    #pragma message "defined 1"
    #else
    #pragma message "defined 0"
    #endif
    
    #if CHECK(COND1)
    #pragma message "defined 1"
    #else
    #pragma message "defined 0"
    #endif
    
    $ g++ main.cpp
    main.cpp:9:1: error: user-defined literal in preprocessor expression
        9 | #if CHECK(COND)
          | ^~~~~
    main.cpp:15:17: note: ‘#pragma message: defined 0’
       15 | #pragma message "defined 0"
          |                 ^~~~~~~~~~~
    main.cpp:19:17: note: ‘#pragma message: defined 1’
       19 | #pragma message "defined 1"
          |                 ^~~~~~~~~~~
    

提交回复
热议问题