Идентификатор _ _ VA_ARGS _ _ должен присутствовать только в списке замены функционально-подобного макроса, который использует многоточие в параметрах.

тладочных сборок я обычно использую 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 ++ (и, конечно, я знаю, что препроцессор интерпретируется независимо)?

Ответы на вопрос(4)

Ваш ответ на вопрос