【发布时间】:2015-03-29 00:20:17
【问题描述】:
我正在使用 VS2010 C++ 中的预处理器定义版本字符串。我有以下#defines:
#define IMPORT_VERSION_1_1 L"IMPORT 1.0"
#define EPAPI_VERSION_1_1 L"EPAPI 1.1"
#define EPAPI_VERSION_1_2 L"EPAPI 1.2"
#define EPAPI_VERSION_1_3 L"EPAPI 1.3"
#define EPAPI_VERSION_ALL_1_2 (EPAPI_VERSION_1_2 L"," EPAPI_VERSION_1_3)
#define EPAPI_VERSION_ALL_1_2_NoParens EPAPI_VERSION_1_2 L"," EPAPI_VERSION_1_3
#define EPAPI_VERSION_ALL_1_3 (EPAPI_VERSION_1_3)
#define Broken (EPAPI_VERSION_ALL_1_2 L"," IMPORT_VERSION_1_1)
#define Works (EPAPI_VERSION_ALL_1_2_NoParens L"," IMPORT_VERSION_1_1)
const wchar_t* sJunk = Broken;
如果我使用 Broken 来初始化 sJunk,我会收到以下错误:
错误 C2143:语法错误:在 'string
之前缺少 ')' 错误 C2059:语法错误:')'
如果我使用 Works,没有错误,我会得到我希望的字符串:
EPAPI 1.2,EPAPI 1.3,IMPORT 1.0.
显然这与EPAPI_VERSION_ALL_1_2 的嵌套括号有关。但是,如果可以避免的话,我真的不想删除它们,因为对非括号宏的副作用有据可查。
任何人都可以就如何定义我想要的宏并保留括号提供任何建议吗?
谢谢
【问题讨论】:
标签: c++ visual-studio-2010 nested c-preprocessor parentheses