Search code examples
c++c-preprocessorpreprocessor-directive

What can('t) I do with #if?


I have a bunch of preprocessor config options defined in config.h. I use them like so:

#if CONFIG_OPTION1
    /* do some stuff */
#endif

config.h contains their defines:

#define CONFIG_OPTION1 _DEBUG
#define CONFIG_OPTION2 _DEBUG || (NDEBUG && _WIN64)
...

The above doesn't work. I want to turn on and off these config options based on configuration (debug, release, etc) and/or other defines. It also doesn't work if I do:

#define CONFIG_OPTION1 defined(_DEBUG) || defined(NDEBUG)

I never get inside the #if CONFIG_OPTION1 even when the condition looks like it should be met. When I write #if defined(_DEBUG) that works fine, but #if with a macro as the condition fails. How can I fix this?


Solution

  • Well, as you've already noticed, you can't do it like that. Do something like this instead:

    #if _DEBUG || (NDEBUG && _WIN64)
    #   define CONFIG_OPTION2 1
    #endif