我可以用 #if 做什么?

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

本文关键字:什么 #if 我可以      更新时间:2023-10-16

我在config.h中定义了一堆预处理器配置选项。我这样使用它们:

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

config.h包含它们的定义:

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

以上内容不起作用。我想基于配置(调试、发布等)和/或其他定义来打开和关闭这些配置选项。如果我这样做,它也不起作用:

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

即使条件看起来应该满足,我也从未进入#if CONFIG_OPTION1。当我写#if defined(_DEBUG)时,它工作得很好,但以宏作为条件的#if失败了。我该怎么解决这个问题?

好吧,正如您已经注意到的,您不能这样做。改为这样做:

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