扩展__VA_ARGS__时,Oracle Solaris Studio 12.3的C++预处理程序会完全删除空格。

任何人都可以在其系统上确认此行为吗?它是已知的编译器错误吗?有没有解决此问题的方法?

为了说明这一点,这是一个简单的测试程序vaargs.c:

#include <stdio.h>

#define PRINT(...) printf("%s\n", #__VA_ARGS__)

int main()
{
    PRINT(hello world);

    return 0;
}

C预处理程序按预期工作:
$ cc vaargs.c -o vaargs && ./vaargs
hello world

$ cc -V
cc: Sun C 5.12 SunOS_i386 2011/11/16

但是C++预处理程序删除了“hello”和“world”之间的空格:
$ CC vaargs.c -o vaargs && ./vaargs
helloworld

$ CC -V
CC: Sun C++ 5.12 SunOS_i386 2011/11/16

最佳答案

根据N3337 16.3.2(cpp.stringize)p2(这是引号的其余部分),这是一个编译器错误:

关于C++预处理器删除了对可变参数宏的调用中的空格(Solaris Studio 12.3),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26219063/

10-10 17:40