有人可以解释为什么以下不起作用?C++翻译阶段混乱
int main() // Tried on several recent C++ '03 compilers.
{
#define FOO L
const wchar_t* const foo = FOO"bar"; // Will error out with something like: "identifier 'L' is undefined."
#undef FOO
}
我认为预处理是在比字符串文字操作和通用记号翻译更早的翻译阶段完成的。
岂不编译器或多或少的看到这一点:
int main()
{
const wchar_t* const foo = L"bar";
}
这将是巨大的,如果有人能举出从标准的解释。
当然!谢谢。实际上应该查看预处理过的输出... – blakecl 2010-04-28 02:26:55
确保在此定义和下一行之间留有空行,否则宏将继续。过去我曾多次使用这种方法来制作多行宏。 – 2010-04-28 02:40:47
请注意,这不适用于符合预处理器,因为符合预处理器是基于令牌的。将两个令牌合并为一个(例如,“L”和“bar”)的唯一方法是使用连接运算符('##'),它不能作为替换列表的最后一个符号出现。 – 2010-05-06 01:11:08