Is an empty initializer list valid C code?

It is common to use {0} to initialize a struct or an array but consider the case when the first field isn't a scalar type. If the first field of struct Person is another struct or array, then this line will result in an error (error: missing braces around initializer).

struct Person person = {0};

At least GCC allows me to use an empty initializer list to accomplish the same thing

struct Person person = {};

But is this valid C code?

Also: Is this line guaranteed to give the same behavior, i.e. a zero-initialized struct?

struct Person person;


  • No, an empty initializer list is not allowed. This can also be shown by GCC when compiling with -std=c99 -pedantic:

    a.c:4: warning: ISO C forbids empty initializer braces

    The reason is the way the grammar is defined in §6.7.9 of the 2011 ISO C Standard:

             { initializer-list }
             { initializer-list , }
             designation(opt) initializer
             initializer-list , designation(opt) initializer

    According to that definition, an initializer-list must contain at least one initializer.