Procesor C++ Oracle Solaris Studio 12.3 całkowicie usuwa spacje podczas rozwijania __VA_ARGS__
.Preprocesor C++ usuwa białe znaki w wywołaniach makr warstwowych (Solaris Studio 12.3)
Czy ktoś może potwierdzić to zachowanie w swoim systemie? Czy jest to znany błąd kompilatora? Czy są jakieś obejścia tego problemu?
Aby zilustrować, oto prosty program testowy, vaargs.c
:
#include <stdio.h>
#define PRINT(...) printf("%s\n", #__VA_ARGS__)
int main()
{
PRINT(hello world);
return 0;
}
C preprocesor działa zgodnie z oczekiwaniami:
$ cc vaargs.c -o vaargs && ./vaargs
hello world
$ cc -V
cc: Sun C 5.12 SunOS_i386 2011/11/16
Ale C++ preprocesora usuwa przestrzeń pomiędzy "hello" i " świat ":
$ CC vaargs.c -o vaargs && ./vaargs
helloworld
$ CC -V
CC: Sun C++ 5.12 SunOS_i386 2011/11/16
Zarówno clang (3.5), jak i GCC (4.9.1) wyświetlają dla mnie "cześć świat" (dla C i C++). Nie mam Solaris Studio, więc nie mogę tego potwierdzić. – Cornstalks
Wygląda na to, że problem dotyczy preprocesora Solaris Studio 12.3 C++. Problem nie występuje w poprzedniej wersji (12.2). – Claudio