0

以下代码无法在我的 VC++ 2010 项目中编译:

define MY_MAJOR_VERSION   20
define OLESTR_(str)       L##str
define MOLE( STR )        OLESTR_(#STR)
define MAKE_STR(STR)      MOLE(STR)

REGMAP_ENTRY(MAKE_STR(VERSION), MAKE_STR(MY_MAJOR_VERSION))

VERSION不是宏定义,只是文本。最后,我想要:

REGMAP_ENTRY(L"VERSION", L"20")

但是当我在调试模式下编译时,我得到的是:

REGMAP_ENTRY(L"VERSION", LL"20")

我认为这是一个项目设置,因为我在其他情况下在调试模式下使用过它,但从来没有遇到过这个问题。是否有 VC++ 2010 设置会导致字符串化运算符插入Lor _T

4

1 回答 1

0

对我来说,这个(请注意,我改为MAKE_STR-MAKE_OLESTR我认为这是问题中发布的代码中的错字):

#define MY_MAJOR_VERSION   20
#define OLESTR_(str)       L##str
#define MOLE( STR )        OLESTR_(#STR)
#define MAKE_OLESTR(STR)      MOLE(STR)

REGMAP_ENTRY(MAKE_OLESTR(VERSION), MAKE_OLESTR(MY_MAJOR_VERSION))

预处理(如 所示cl /E test.c):

REGMAP_ENTRY(L"VERSION", L"20")

这似乎是你想要的。

您可能想要发布可以使用命令行编译复制的内容。

于 2012-09-28T17:46:48.580 回答