Initialising an union
Alexandre Oliva
oliva@dcc.unicamp.br
Thu Aug 20 08:15:00 GMT 1998
Aurel Balmosan <ab@orga.com> writes:
> Alexandre Oliva wrote:
>> Does it apply to local non-static variables? I'm pretty sure this is
>> true for variables in static storage, but how about local ones?
>> Unfortunately, I don't have access to the ANSI-C Standard :-(
[snip]
> This make clear that auto and register structs/unions/vektors
> can be initialised.
That was not my question. I asked whether the standard explicitly
stated that uninitialized members of an automatic union would be
implicitly zero-initialized. A summary of the related posts to the
list follows:
1) automatic unions can be explicitly initialized
2) if a initializer-list contains less elements than the initialized
object, the remaining elements are zero-initialized
3) when a union is explicitly initialized, the initializer-list will
be used to initialize the first element of the union
so, given the following code snippet:
union t {
int i;
char c[sizeof(int)+1];
};
void foo() {
union t x = { 0 };
assert(c[sizeof(int)]==0);
}
Given only the three statements listed above, the assertion *can*
fail, because the second type of the union (c) is *not* initialized,
only the first one (i) is. Thus, it needs not be zero initialized,
based on the claims above.
As I have stated earlier, I don't have a copy of the C Standard, and
I'd be happy to find out that the Standard does specify that union
initialization must be performed as if the whole union were
zero-initialized before explicit initialization takes place. It's
just that I haven't read (or understood :-) any claim that supports
this interpretation, and it doesn't look much like C to me :-)
--
Alexandre Oliva
mailto:oliva@dcc.unicamp.br mailto:aoliva@acm.org
http://www.dcc.unicamp.br/~oliva
Universidade Estadual de Campinas, SP, Brasil
More information about the Gcc-bugs
mailing list