Add G_VALUE_INIT

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
This commit is contained in:
Marc-André Lureau 2011-07-17 21:18:04 +02:00 committed by Matthias Clasen
parent a9ca74efb1
commit d2ca14c270
3 changed files with 20 additions and 3 deletions

View File

@ -376,6 +376,7 @@ g_variant_type_get_gtype
<SECTION>
<TITLE>Generic values</TITLE>
<FILE>generic_values</FILE>
G_VALUE_INIT
G_VALUE_HOLDS
G_VALUE_TYPE
G_VALUE_TYPE_NAME

View File

@ -73,9 +73,9 @@
* main (int argc,
* char *argv[])
* {
* /&ast; GValues must start zero-filled &ast;/
* GValue a = {0};
* GValue b = {0};
* /&ast; GValues must be initialized &ast;/
* GValue a = G_VALUE_INIT;
* GValue b = G_VALUE_INIT;
* const gchar *message;
*
* g_type_init ();

View File

@ -161,6 +161,22 @@ void g_value_register_transform_func (GType src_type,
*/
#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