Search code examples
cgccstructwarningsglib

How can I remove the warning in GCC 4.6: "missing initializer [-Wmissing-field-initializers]"?


The code

  GValue value = { 0 };

gives the following warning:

missing initializer [-Wmissing-field-initializers]

I know that's a GCC bug, but is there some trick to remove it? It is really not nice see such unreal warnings. But I don't want power off the warning because it will hide real warnings from me too. And sorry, but I can't update my GCC to 4.7 (where looks like it was fixed) version, yet.


Solution

  • Use G_VALUE_INIT to initialize GValue-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 with

    GValue value = G_VALUE_INIT;
    

    There 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 initialized struct fields be zeroed, and gcc obeys the standard.

    You could use diagnostic pragmas like

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

    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 such struct are intended to be initialized.