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



我用谷歌搜索了又谷歌搜索,要么谷歌让我失望,要么你不能这样做。当您打开-Wpedantic时会出现此警告...

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

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

迂腐的警告是否特别,因为您无法单独删除它们?

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

您必须使用编译指示逐案进行。

主.cpp

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

该程序引发两种-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];
               ^

-Wno-vla将抑制第二个。要抑制第一个,您必须诉诸:

主.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];
               ^

好吧,您可以使用杂注来禁用它,但是如果您想便携,则可以改用零大小的std::array

#include <array>
//...
std::array<int, 0> ar;

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

相关内容

  • 没有找到相关文章

最新更新