如何禁用特定的gcc学究警告?

stu*_*stu 2 gcc compiler-warnings

我用谷歌搜索和google搜索谷歌是让我失败,或者你不能这样做.打开时会出现此警告-Wpedantic...

ISO C++禁止零大小数组'变量'[-Wpedantic]

我想关掉这一个警告,而不是所有迂腐的警告.通常,我只是添加,-Wno-xyz 但我找不到与该警告相关的标志名称.它没有列在任何地方.

迂腐警告特别之处在于你不能单独删除它们吗?

Mik*_*han 5

好消息:你可以做到这一点.坏消息:你不能使用任何命令行选项.将[-Wpedantic]在诊断结束告诉你-Wno-pedantic的是,将禁用诊断最窄的选项,这是没有用的你,如果你想保留的所有其他迂腐诊断.

你必须逐个进行编译指示.

main.cpp中

int main(int argc, char *argv[])
{
    int a[0];
    int b[argc];
    return sizeof(a) + sizeof(b);
}
Run Code Online (Sandbox Code Playgroud)

这个程序引发了两个-Wpedantic诊断:

$ g++ -Wpedantic -c main.cpp
main.cpp: In function ‘int main(int, char**)’:
main.cpp:6:12: warning: ISO C++ forbids zero-size array ‘a’ [-Wpedantic]
     int a[0];
            ^
main.cpp:8:15: warning: ISO C++ forbids variable length array ‘b’ [-Wvla]
     int b[argc];
               ^
Run Code Online (Sandbox Code Playgroud)

-Wno-vla将压制第二个.要压制第一个,你必须诉诸:

main.cpp(修订版)

int main(int argc, char *argv[])
{
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wpedantic"
    int a[0];
#pragma GCC diagnostic pop
    int b[argc];
    return sizeof(a) + sizeof(b);
}
Run Code Online (Sandbox Code Playgroud)

用哪个:

$ g++ -Wpedantic -c main.cpp
main.cpp: In function ‘int main(int, char**)’:
main.cpp:8:15: warning: ISO C++ forbids variable length array ‘b’ [-Wvla]
     int b[argc];
               ^
Run Code Online (Sandbox Code Playgroud)

  • 这可以通过宏来完成警告吗?比如说,带有空参数列表的可变参数宏会引发警告“ISO C++11 要求可变参数宏中的“...”至少有一个参数” (2认同)