c - 如何删除 GCC 4.6 : "missing initializer [-Wmissing-field-initializers]"? 中的警告

标签 c gcc struct warnings glib

代码

  GValue value = { 0 };

给出以下警告:

missing initializer [-Wmissing-field-initializers]

我知道那是 GCC bug ,但是有什么技巧可以删除它吗?看到这样不真实的警告真的不好。但我不想关闭警告,因为它也会对我隐藏真正的警告。抱歉,我还不能将我的 GCC 更新到 4.7(看起来已修复)版本。

最佳答案

使用G_VALUE_INIT 初始化GValue-s。它们的(私有(private))结构位于 /usr/include/glib-2.0/gobject/gvalue.h 中,#define G_VALUE_INIT 适当。

我强烈不同意您关于这是 GCC 错误的评估。如果某个字段未使用 -Wmissing-field-initializers 显式初始化,您会要求收到警告,您会收到应得的警告。

遗憾的是 G_VALUE_INIT 没有记录,但它在这里。代码用

GValue value = G_VALUE_INIT;

如果询问 -Wmissing-field-initializers,则没有通用的解决方案永远不会收到有关缺少字段初始化的警告。当您要求这样的警告时,您需要编译器警告每个不完整的初始化程序。事实上,该标准要求将所有非显式初始化的 struct 字段置零,并且 gcc 遵守该标准。

你可以使用 diagnostic pragmas喜欢

#pragma GCC diagnostic ignored "-Wmissing-field-initializers"

但我的感觉是您应该谨慎编码,并显式初始化所有字段。您收到的警告更像是一种编码风格警告(也许您忘记了一个字段!),而不是错误警告。

我还相信,对于您自己的(公共(public))struct,您应该#define 一个初始化宏,如果这样的 struct 是初始化。

关于c - 如何删除 GCC 4.6 : "missing initializer [-Wmissing-field-initializers]"? 中的警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13373695/

相关文章:

c - 纯 C(可能是 C++)上的轻量级开源软件合成器库。 PCM。

c - 当我在 Unix 中调用 fork() 时会发生什么?

c - 我在使用字符串分配内存时遇到问题

c++ - 宏和方法之间可能存在的冲突

无法将简单的 "hellow world"与 Simd 库链接

arrays - 如何从结构数组中获取 "select"列?

c - 分配给结构字段时无符号短更改值

C Struct char 成员得到一个奇怪的值

gcc - 使用 GCC 内联 ARM asm 跳转到地址

c++ - C++ 中的嵌套结构