我正在研究预处理器的确切行为的 C++ 标准(我需要实现某种 C++ 预处理器)。据我了解,我在下面编写的示例(以帮助我理解)应该是有效的:
#define dds(x) f(x,
#define f(a,b) a+b
dds(eoe)
su)
我希望第一个函数(如宏调用)dds(eoe)
被替换为f(eoe,
(注意替换字符串中的逗号),然后将其视为f(eoe,su)
重新扫描输入的时间。
但是 VC++2010 的测试给了我这个(我告诉 VC++ 输出预处理文件):
eoe+et_leoe+et_l
su)
这是违反直觉的,显然是不正确的。是 VC++2010 的 bug 还是我对 C++ 标准的误解?特别是,像我一样在替换字符串的末尾加上逗号是否不正确?我对 C++ 标准语法的理解是,任何preprocessing-token
' 都是允许的。
编辑:
我没有 GCC 或其他版本的 VC++。有人可以帮我验证这些编译器。