The code:
GValue value = { 0 };
Give the following warning:
missing initializer [-Wmissing-field-initializers]
I know that's a gcc's BUG
; but is there some trick to remove it? really not nice see such unreal warnings. But I don't want power off the warning because it will hidden real warnings from me too. A sorry, but I can't update my gcc to 4.7(where looks like it was fixed) version, yet.
It also appears that using the .field-style of initialization, such as:
will cause the compiler to not issue the warning. Unfortunately if the struct is opaque, this is a non-starter.
Use
G_VALUE_INIT
to initializeGValue
-s. Their (private) structure is in/usr/include/glib-2.0/gobject/gvalue.h
which#define G_VALUE_INIT
appropriately.I strongly disagree with your assessment that it is GCC's bug. You ask to be warned if a field is not explicitly initialized with
-Wmissing-field-initializers
and you get the warning you deserve.Sadly
G_VALUE_INIT
is not documented, but it is here. Code withThere is no universal solution to never get the warning about missing field initialization if
-Wmissing-field-initializers
is asked. When you ask for such a warning, you require the compiler to warn of every incomplete initializers. Indeed, the standard requires than all the non-explicitly initializedstruct
fields be zeroed, andgcc
obeys the standard.You could use diagnostic pragmas like
But my feeling is that you should code with care, and explicitly initialize all the fields. The warning you get is more a coding style warning (maybe you forgot a field!) than a bug warning.
I also believe that for your own (public)
struct
you should#define
an initializing macro, if suchstruct
are intended to be initialized.You could use:
to inhibit that warning specifically. Conversely, you could make it into an error with:
Both of these work with GCC 4.7.1; I believe they work with GCC 4.6.x too, but they don't work with all earlier versions of GCC (GCC 4.1.2 recognizes
-Wno-missing-field-initializers
but not-Werror=missing-field-intializers
).Obviously, the other way to suppress the warning is to initialize all fields explicitly. That can be painful, though.