如何删除 GCC 4.6 中的警告:“缺少初始化程序 [-Wmissing-field-initializers]”?

2024-02-29

The code

  GValue value = { 0 };

给出以下警告:

缺少初始化程序 [-Wmissing-field-initializers]

我知道那是一个GCC bug https://stackoverflow.com/questions/1538943/why-is-the-compiler-throwing-this-warning-missing-initializer-isnt-the-stru,但是有什么技巧可以去除它吗?看到这样不真实的警告真的很不好。但我不想关闭警告,因为它也会向我隐藏真正的警告。抱歉,我还无法将 GCC 更新到 4.7(看起来已修复)版本。


Use G_VALUE_INIT初始化GValue-s。他们的(私人)结构是/usr/include/glib-2.0/gobject/gvalue.h which #define G_VALUE_INIT适当地。

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

Sadly G_VALUE_INIT没有记录,但它在这里。代码与

GValue value = G_VALUE_INIT;

没有通用的解决方案可以永远不会收到有关缺少字段初始化的警告,如果-Wmissing-field-initializers被问到。当您请求此类警告时,您需要编译器警告每个不完整的初始值设定项。事实上,该标准要求所有非显式初始化struct字段被归零,并且gcc遵守标准。

你可以使用诊断语用 http://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html like

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

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

我也相信对于你自己(公众)struct你应该#define初始化宏,如果是的话struct旨在被初始化。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何删除 GCC 4.6 中的警告:“缺少初始化程序 [-Wmissing-field-initializers]”? 的相关文章

随机推荐