c – 忽略gcc / clang的“-Wmissing-brace”警告是明智的吗?

考虑下面的程序:

#include <array>

int main()
{
  std::array<int, 1> x = { 0 }; // warning!
  x = { { 0 } }; // no warning
  return 0;
}

第一个初始化导致在gcc 4.7.2上的警告… …

main.cpp:5:22: warning: unused variable ‘x’ [-Wunused-variable]

…和clang 3.1

main.cpp:5:28: warning: suggest braces around initialization of subobject [-Wmissing-braces]
  std::array<int, 1> x = { 0 };

就标准而言,双花括号或单花括号之间应该没有区别,至少在这个例子中。

有两种方法来处理警告:

>只需关闭它
>修复代码,所以编译器很高兴

你建议什么? IMHO,双卷曲表情看起来有点丑陋。另一方面,警告可能在更复杂的示例中检测到实际问题。你知道一个例子,警告会帮助你吗?

-Wmissing-braces will no longer be enabled in GCC’s -Wall (for C++ mode), as of 4.8, for precisely the reason you describe.对于当前版本的GCC,禁用或忽略警告,您编写的代码按照其应该的方式编写。

警告可能意味着覆盖代码

struct A { int a; int b; };
struct B { A a; int b; };
B b = {
  1,
  2 // initialises b.a.b, not b.b
};

然而,IMHO,已经由-Wmissing字段初始化器处理得很好,它不警告你的原始代码。

http://stackoverflow.com/questions/13905200/is-it-wise-to-ignore-gcc-clangs-wmissing-braces-warning

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c – 忽略gcc / clang的“-Wmissing-brace”警告是明智的吗?