【问题标题】:Preprocessor value check not working预处理器值检查不起作用
【发布时间】:2013-09-12 10:36:19
【问题描述】:
#pragma message("MAP_ENGINE=" BOOST_PP_STRINGIZE(MAP_ENGINE))
#if MAP_ENGINE == CE4
    Type4 x = new Type4();
#elif MAP_ENGINE == CE5
    Type5 x = new Type5();
#endif

此代码应该根据预处理器值创建不同类型的 var x。我在 Visual C++ 项目设置中设置了MAP_ENGINE

但 CE4 代码仍在编译,我得到一个错误。我添加了#pragma 来检查值是否设置:

1>MAP_ENGINE=CE5
1>.\MyFile.cpp(141) : error C2039: 'Type4 ' : undeclared identifier

它一定是愚蠢的,但我看不到它!在项目设置中定义它是否意味着 CE4/CE5 实际上并不是一个定义的值?

【问题讨论】:

    标签: visual-c++ visual-studio-2005 c-preprocessor


    【解决方案1】:

    预处理器 == 运算符仅执行整数运算(不扩展为看起来像整数的宏被认为具有值 0)。不能用于比较字符串。

    把它变成这样:

    #if defined(MAP_ENGINE_CE4)
    // ...
    #elif defined(MAP_ENGINE_CE5)
    // ...
    #else
      #error Exactly one of MAP_ENGINE_CE4 and MAP_ENGINE_CE5 must be defined
    #endif
    

    【讨论】:

    • 啊,这很有道理。我目前正在测试将其定义为 0xCE4 而不是 CE4,这可以确认您的诊断,但相当 hacky!
    猜你喜欢
    • 2013-03-18
    • 1970-01-01
    • 2014-04-17
    • 2017-08-08
    • 1970-01-01
    • 2020-10-14
    • 1970-01-01
    • 1970-01-01
    • 2016-08-14
    相关资源
    最近更新 更多