Для debugbuild я обычно использую Clang, так как он лучше форматирует предупреждения и ошибки и немного упрощает их отслеживание и исправляет их.
Но недавно после добавления макроса с переменными аргументами, Кланг рассказал мне следующее (из фиктивного проекта):
main.cpp:5:20: warning: named variadic macros are a GNU extension [-Wvariadic-macros]
#define stuff3(args...) stuff_i(args)
Я знаю, что macroname(args...)
компилируется в широком диапазоне компиляторов, включая Visualstudio, Sunstudio и, конечно же, GCC. Но чтобы убедиться, что clang прав, я попробовал еще два способа расширения вариативных аргументов:
Номер 1:
#define stuff1(...) stuff_i(...)
Номер 2:
#define stuff2(...) stuff_i(__VA_ARGS__)
На обоих я получаю это сообщение:
main.cpp:3:16: warning: variadic macros were introduced in C99 [-Wvariadic-macros]
... Заставляет меня задаться вопросом, действительно ли макросы Variadic являются частью стандарта С++ (и, конечно, я знаю, что препроцессор интерпретируется независимо)?