以下代码无法在我的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设置会导致字符串化运算符插入L
或_T
?
答案 0 :(得分: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")
这似乎是你想要的。
您可能希望发布可以使用命令行编译重现的内容。