Oracle Solaris Studio 12.3 の C++ プリプロセッサは、展開時に空白を完全に削除します__VA_ARGS__
。
システムでこの動作を確認できる人はいますか? それは既知のコンパイラのバグですか? この問題の回避策はありますか?
説明のために、簡単なテスト プログラムを次に示します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