我有一个C ++应用程序,在其中我使用零参数可变变量宏。但是,我真的不喜欢这里在SO上发布的各种标准答案的各种答案,而是保留GCC特定的##__VAR_ARGS__
。
我想尽可能多地得到警告。
我的构建系统是介子,我通过了选项--buildtype=debugoptimized --warning_level=2 --werror=true
并指定了-Wno-pedantic
作为附加项目参数。
Ob Ubuntu 18.04,gcc 7.3.0,介子0.45.1为编译器添加了以下选项:-Wall -Wextra -Werror -Wpedantic -Wno-pedantic -std=c++11
,一切正常。
相同的代码,CentOS 7.4.1708,gcc 4.8.5,介子0.44.1上的相同选项向编译器添加了完全相同的选项,但没有编译,并且出现以下错误:
ISO C99 requires rest arguments to be used
(用于可变参数宏)
在此编译器中似乎忽略了-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
设置为项目参数。
所以我不确定这是编译器问题,介子问题还是只是我遇到的一些不幸的版本差异。