Compiling this with -Wmissing-field-initializers evokes a warning:

    struct foo { int a; int b; };
    struct foo f = { 1 };

but with "designated initializers" it does not:

    struct foo { int a; int b; };
    struct foo f = { .a = 1 };

That -Wmissing-field-initializers works this way is even documented.

My quandary is that I'd prefer to use the more readable and
maintainable c99 form, especially with long lists of member names:

  foo = {
    .f1 = callback_a,
    .f2 = callback_b,
    .f3 = callback_c,
    ...
    .fn = callback_n,
  };

Then, it's obvious that foo.f23 is initialized to callback_23,
whereas with old-style initializations, I'd have to count,
and if ever I had the misfortune to reorder member names,
and signatures are similar, it'd be easy to miss the error.

However, the old-style initialization has the advantage that
when I add a new member, gcc -Wmissing-field-initializers will
prompt me to add a new initializer.  With the c99-style, there
seems to be no way to evoke a similar prod.

Maybe we can get the best of both worlds?

Paolo Bonzini mentioned that this would be easy to implement,
and that -Wmissing-field-initializers=2 may be the way to do it,
given the precedent of -Wstrict-overflow and -Wstrict-overflow=<N>.


-- 
           Summary: make -Wmissing-field-initializers=2 work with
                    "designated initializers" ?
           Product: gcc
           Version: 4.5.0
            Status: UNCONFIRMED
          Severity: enhancement
          Priority: P3
         Component: c
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: jim at meyering dot net


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39589

Reply via email to