预处理器值检查不起作用

时间:2013-09-12 10:36:20

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

#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

enter image description here

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

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

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

1 个答案:

答案 0 :(得分:0)

预处理程序==运算符仅执行整数运算(不扩展为看起来像整数的宏的宏被视为具有值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