An attempt to use designated initializers to explicitly re-initialize
a sub-member `y` of a struct member `b.a`
#include <stdio.h>
struct A { int x, y; };
struct B { struct A a; };
int main(void)
{
struct A ia = { 1, 2 };
struct B b = { .a = ia, .a.y = 42 };
printf("%d %d\n", b.a.x, b.a.y);
}
GCC outputs:
0 42
I.e. it does initialize `b.a.y` with `42`, but for some reason also
produces zero in `b.a.x`. Meanwhile, Clang, MSVC output
1 42
as expected.
The funny part is that this exact functionality is actually directly illustrated by the standard in "6.7.11 Initialization" example 12.
Is it just a bug or is there some defiant reasoning (e.g. "we know
better") for GCC's behavior?
| Sysop: | DaiTengu |
|---|---|
| Location: | Appleton, WI |
| Users: | 1,090 |
| Nodes: | 10 (0 / 10) |
| Uptime: | 45:23:06 |
| Calls: | 13,946 |
| Calls today: | 3 |
| Files: | 187,034 |
| D/L today: |
8,062 files (2,942M bytes) |
| Messages: | 2,460,945 |