The implementation of GValue is not public or documented. When
allocated on the stack, initializing a GValue is usually done as
documented with:
GValue value = { 0, };
There is lot code around (including WebKit) that added all the missing
fields, resulting in this ugly and non-obvious:
GValue value = { 0, { { 0 } } };
However, this doesn't play nice with -Wmissing-field-initializers for
example. Thus, G_VALUE_INIT.
http://bugzilla.gnome.org/show_bug.cgi?id=654793
http://bugzilla.gnome.org/show_bug.cgi?id=577231
<SECTION>
<TITLE>Generic values</TITLE>
<FILE>generic_values</FILE>
+G_VALUE_INIT
G_VALUE_HOLDS
G_VALUE_TYPE
G_VALUE_TYPE_NAME
* main (int argc,
* char *argv[])
* {
- * /* GValues must start zero-filled */
- * GValue a = {0};
- * GValue b = {0};
+ * /* GValues must be initialized */
+ * GValue a = G_VALUE_INIT;
+ * GValue b = G_VALUE_INIT;
* const gchar *message;
*
* g_type_init ();
*/
#define G_VALUE_NOCOPY_CONTENTS (1 << 27)
+/**
+ * G_VALUE_INIT:
+ *
+ * A #GValue must be initialized before it can be used.
+ * This macro can be used as initializer instead of an explicit
+ * <literal>{ 0 }</literal> when declaring a variable,
+ * but it cannot be assigned to a variable.
+ *
+ * |[
+ * GValue value = G_VALUE_INIT;
+ * ]|
+ *
+ * Since: 2.30
+ */
+#define G_VALUE_INIT { 0, { { 0 } } }
+
G_END_DECLS