Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我能用“如果”做什么?_C++_C Preprocessor_Preprocessor Directive - Fatal编程技术网

C++ 我能用“如果”做什么?

C++ 我能用“如果”做什么?,c++,c-preprocessor,preprocessor-directive,C++,C Preprocessor,Preprocessor Directive,我在config.h中定义了一系列预处理器配置选项。我这样使用它们: #if CONFIG_OPTION1 /* do some stuff */ #endif config.h包含它们的定义: #define CONFIG_OPTION1 _DEBUG #define CONFIG_OPTION2 _DEBUG || (NDEBUG && _WIN64) ... 上述方法不起作用。我想根据配置(调试、发布等)和/或其他定义打开和关闭这些配置选项。如果我这样做,它也不

我在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

+1.根据“如果
定义的
操作符是宏扩展的结果,C标准会说行为是未定义的。”@CatPlusPlus如果我这样做,我还需要
#将它定义为
0
,比如在
#else
中?@Dave:你不必,否。未定义的宏名称会自动解释为零。@ruakh:依赖未定义的宏为零是一种非常糟糕的做法。最好将宏显式定义为0和1,并将编译器配置为在使用未定义的预处理器符号时发出错误,这样您将发现基本错误,如拼写错误、使用符号而不包含正确的头文件等@Lindydancer:Interest。你说的有道理,但是我上面链接到的GNU C预处理器文档实际上给出了完全相反的建议,比如说,由于这个属性,
\if defined-BUFSIZE&&BUFSIZE>=1024
可以“简化”为
\if-BUFSIZE>=1024