我用谷歌搜索了又谷歌搜索,要么谷歌让我失望,要么你不能这样做。当您打开-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
。