为什么这个取消注释的宏在clang中无效,但在msvc中有效:
http://coliru.stacked-crooked.com/a/8fd2a3ccd933618f
http://rextester.com/GFNL42397
#define COMMENT / ## /
int main()
{
COMMENT int a = 0;
}
答案 0 :(得分:3)
如果你看一下,例如this translation phase reference您将看到注释被第3阶段中的最后一个空格替换,这是在运行预处理器之前的阶段。因此,您显示的代码无效。 Clang是对的。
答案 1 :(得分:1)
因为MSVC重新评估预处理器输出而clang没有:
MSVC重新扫描预处理的输入,并用单个空格替换注释行。因此,MSVC不会抱怨。