2

我有一个 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(对于可变参数宏)

似乎-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为项目参数。

所以我不确定这是编译器问题、介子问题还是我遇到的一些不幸的版本差异。

4

0 回答 0