代码
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/