如何比较在C ++中分配给#define的布尔值

时间:2014-03-05 07:36:16

标签: c++ preprocessor-directive

我必须将日志记录添加到特定模块,这应该允许我在需要时启用和禁用日志记录。我添加了几个#defines来做到这一点。代码如下:

#define PAINT_LOG_ENABLED   true

#if PAINT_LOG_ENABLED == true

    #define PAINT_LOG_EXTENSIVELY   true

    #if PAINT_LOG_EXTENSIVELY == true
        #define PAINT_LOG_FILE_NAME     TEXT("paint-log-ex.log")
    #else
        #define PAINT_LOG_FILE_NAME     TEXT("paint-log.log")
    #endif

#endif

但这引起了我的错误说法 致命错误C1017:无效的整数常量表达式

当我使用1和0而不是true和false时,上面的代码有效。 请帮忙。

2 个答案:

答案 0 :(得分:2)

c ++预处理器可以测试已定义值的存在。您无需使用true。而不是

 #define PAINT_LOG_ENABLED   true

 #if PAINT_LOG_ENABLED == true

你可以简单地写

 #define PAINT_LOG_ENABLED

 #if PAINT_LOG_ENABLED

答案 1 :(得分:0)

gcc编译它。我猜它可能与MSVC预处理器有关。

但是,如果可能的话,我建议不要使用定义,在这种情况下,您可以轻松地 通过编写类似的东西来避免使用c预处理器:

const bool PAINT_LOG_ENABLED = true;
const bool PAINT_LOG_EXTENSIVELY = PAINT_LOG_ENABLED;
const char* PAINT_LOG_FILE_NAME = PAINT_LOG_EXTENSIVELY ? "paint-log-ex.log" : "paint-log.log";