如何禁用特定的gcc迂腐警告?

时间:2018-02-01 15:21:30

标签: gcc compiler-warnings

我用google搜索谷歌和google谷歌让我失败了,或者你不能这样做。打开-Wpedantic ...

时会出现此警告
  

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

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

迂腐警告的特殊之处在于您无法单独删除它们吗?

2 个答案:

答案 0 :(得分:5)

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

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

<强>的main.cpp

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

该程序引发两个-Wpedantic diaqnostics:

$ 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];
               ^

-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);
}

用哪个:

$ 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];
               ^

答案 1 :(得分:0)

好吧,您可以使用pragma来禁用它,但如果您想要移植,可以使用零大小的std::array代替:

#include <array>
//...

std::array<int, 0> ar;

无论如何,建议在普通数组上使用std::array