This is the mail archive of the mailing list for the GCC project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: Initialising an union.

Yes, I forgot to say that this is only true for C++

(See for a copy
of the working paper)

(maybe something to add to the faq, although it is not the definitive
standard :( )

I don't know what it should be for C++.

Also note that in your example, you are using an **auto-variable** :

void test() 
{       union x X = { 0 }; 

It also seems that I mixed up static/global variables and auto :

This is the relevant section for this problem :

 8.5.1  Aggregates                                      [dcl.init.aggr]

15When  a  union  is  initialized with a brace-enclosed initializer, the
  braces shall only contain an initializer for the first member  of  the
  union.  [Example:
          union u { int a; char* b; };

          u a = { 1 };
          u b = a;
          u c = 1;              // error
          u d = { 0, "asdf" };  // error
          u e = { "asdf" };     // error
    --end example] [Note: as described above, the braces around the ini-
  tializer for a union member can be omitted if the union is a member of
  another aggregate.  ]

It seems not to say anything about the initialization of remaining
bytes. Because those are on the stack, those (probably) wont be
initialized -> so you should explicitly initialize the member you need.

Aurel Balmosan wrote:
> Well in the ANSI-C books I have this is not defined in this way. It is only
> said that unions can now be initialised (ANSI-C version 2)
> So it seems to not a bug in egcs-1.0.3a but what draft is it? C++ or ANSI-C?
> Bye,
>         Aurel.
> --
> Aurel Balmosan           | Department SE-SW
> ORGA Kartensysteme GmbH  | phone: +49 5254 991 824
> An der Kapelle 2         | fax  : +49 5254 991 749
> 33104 Paderborn, Germany |

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]