代码:
GValue value = { 0 };
给出以下警告:
缺少初始化[-Wmissing场-初始化]
我知道这是一个gcc's BUG
; 但有一些技巧,以去除呢? 真的不是很好看这种虚幻的警告。 但我不希望断电警告,因为它会隐藏真实的警告从我也是。 虽然令人遗憾,但我无法将GCC升级到4.7(其中,看起来好像是固定的)版本,还没有。
代码:
GValue value = { 0 };
给出以下警告:
缺少初始化[-Wmissing场-初始化]
我知道这是一个gcc's BUG
; 但有一些技巧,以去除呢? 真的不是很好看这种虚幻的警告。 但我不希望断电警告,因为它会隐藏真实的警告从我也是。 虽然令人遗憾,但我无法将GCC升级到4.7(其中,看起来好像是固定的)版本,还没有。
使用G_VALUE_INIT
初始化GValue
-s。 他们(私人的)结构是/usr/include/glib-2.0/gobject/gvalue.h
其中#define G_VALUE_INIT
适当。
我强烈的评估,这是GCC的bug不同意。 你问如果一个字段未明确初始化警告-Wmissing-field-initializers
,你会得到你应得的警告。
可悲的是G_VALUE_INIT
没有记载,但它是在这里。 使用代码
GValue value = G_VALUE_INIT;
没有通用的解决方案,从来没有得到有关缺失字段初始化如果警告-Wmissing-field-initializers
是问。 当你问这样的警告,你需要编译器警告每不全初始化的。 事实上,标准要求比所有非明确初始化struct
域被归零, gcc
服从标准。
您可以使用诊断编译指示像
#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
但我的感觉是,你应该小心代码,并明确初始化所有字段。 你得到的警告更多的是一种编码风格警告(也许你忘了场!)不是一个错误的警告。
我也相信你自己的(公共) struct
,你应该#define
初始化宏,如果这样的struct
是为了进行初始化。
你可以使用:
-Wno-missing-field-initializers
以抑制警告明确。 相反,你可以把它变成一个错误:
-Werror=missing-field-initializers
都与GCC 4.7.1这些工作; 我相信,他们与GCC 4.6.X工作过,但它们不与所有早期版本的GCC的工作(GCC 4.1.2识别-Wno-missing-field-initializers
但不-Werror=missing-field-intializers
)。
显然,其他的方式来抑制警告是明确初始化所有领域。 这可能是痛苦的,但。
还可以看出使用初始化点域风格,如:
GValue value = { .somefield = 0 };
会导致编译器不会发出警告。 不幸的是,如果结构是不透明的,这是一个非首发。