【发布时间】:2014-04-02 09:21:26
【问题描述】:
我正在尝试了解 C++ 标准预处理器要求。我创建的一个有点棘手的示例在 GCC 和 VC++2010 中产生了令人惊讶的结果:
#define a(x,y) x##y
#define tzsW kka
a(t,zs )W
GCC 产量:
tzs W
注意在 W 之前添加的额外空格。
VC++2010 产出:
tzsW
请注意,在 W 之前没有添加空格,但标识符没有进一步扩展。我扫描了 C++03 标准,找不到任何东西说我们应该阻止像在 gcc 中一样创建新标识符 (tzsW)。并且没有什么可以阻止这个新标识符进一步扩展宏(VC++ 行为)。
为什么 GCC 和 VC++2010 不喜欢新标识符?
编辑
如果使用了另一个宏调用,例如
a(t,zs )[]
gcc 产量:
tzs[]
注意没有加空格,显示gcc故意给我之前的case加空格。
【问题讨论】:
标签: c++ gcc visual-c++ c-preprocessor