У меня есть приложение C ++, где я использую макросы с нулевым аргументом и переменными. Тем не менее, мне не очень нравится стандартное соответствующее решение, опубликованное здесь на SO в различных ответах, но я хочу, чтобы GCC был специфичным ##__VAR_ARGS__
,
Я хотел бы поймать как можно больше предупреждений.
Моя система сборки — мезон, и я прошел опцию --buildtype=debugoptimized --warning_level=2 --werror=true
и указать -Wno-pedantic
в качестве дополнительного аргумента проекта.
В Ob Ubuntu 18.04, gcc 7.3.0, meson 0.45.1 добавлены следующие опции компилятору: -Wall -Wextra -Werror -Wpedantic -Wno-pedantic -std=c++11
и все строит нормально.
Тот же код, те же опции в CentOS 7.4.1708, gcc 4.8.5, meson 0.44.1 явно добавляют те же опции в компилятор, но не компилируются, и я получаю следующую ошибку:
ISO C99 requires rest arguments to be used
(для макроса variadic)
Кажется, что -Wno-pedantic
игнорируется в этом компиляторе.
Я могу немного поиграть с опциями предупреждений, но в Ubuntu или CentOS сборка не удалась. Когда происходит сбой сборки Ubuntu, сообщение об ошибке немного отличается:
ISO C++11 requires at least one argument for the "..." in a variadic macro
Единственное решение для успешной сборки обеих версий, которое я нашел, — это использование meson --buildtype=plain --warning_level=1 -werror=true
и настройка -Wall -Wextra
в качестве аргументов проекта.
Так что я не уверен, что это проблема компилятора, проблема с мезонами или просто какая-то неудачная разница в версии, которую я поражаю.
Задача ещё не решена.
Других решений пока нет …