Hi,

I've been using designated initializers[1] for structures
for some time, in the form they had been implemented
by the Plan9 C compilers[2], i.e. without a '=' between
designator and initializer, like this:

        Point p = {
                .y      100,
                .x      200
        };

In Ansi-C this now is:
        Point p = {
                .y =    100,
                .x =    200
        };

>From Ansi-C's view there are probably
two obsolete forms, one for array designators,
one for designators in struct initializations,
both without the '='.

Apparently the obsolete form for structs is not supported
anymore since SVN rev 89252 [3] (that for array
designators still is):

        (initelt): Only permit array_designator without '=', not ".foo",

which is the solution to problem report #16667.

In gcc/c-parser.c this is now coded in c_parser_initelt
within the "if (des_seen==1) / else" block -- the else
block generates the error.

Is there a chance that the old behaviour could be
re-enabled, i.e. the error turned into an `obsolete'
warning again? If yes, perhaps it would make sense to
always print that warning, not only if -pedantic), which
would reduce that code to
          }
        else
          pedwarn ("obsolete use of designated initializer without %<=%>");

I would find it nice if the old form could be supported
again, as I often use that kind of initialization in
embedded software, and it seems to me that it is a bit
more readable than the Ansi-C version.

Thanks,
Michael

[1] http://www.dmk.com/c/init.html
[2] http://plan9.bell-labs.com/sys/doc/comp.html
[3]
http://gcc.gnu.org/viewcvs/trunk/gcc/c-parse.in?r1=89252&r2=89560&pathrev=95557

Reply via email to