Для отладочных сборок я обычно использую Clang, так как он лучше форматирует предупреждения и ошибки, и немного облегчает их отслеживание и исправление.
Но недавно после добавления макроса с переменными аргументами,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 частью стандарта C ++ (и, конечно, я знаю, что Препроцессор интерпретируется независимо)?