#include <stdio.h>
#include <stdlib.h>
typedef struct MainStruct {
struct SubStruct1 {
int Value;
} s1;
struct SubStruct2 {
int Value;
} s2;
struct SubStruct3 {
int Value;
} s3;
} MainStruct_t;
typedef union {
struct SubStruct1 *s1;
struct SubStruct2 *s2;
struct SubStruct3 *s3;
int Value;
} T;
void setValue( T **t, int i )
{
(*t)->Value=i;
}
int main()
{
MainStruct_t x;
printf("%d %d %d\n",x.
s1.
Value,x.
s2.
Value,x.
s3.
Value);
{
T t1={&x.s1},t2={.s2=&x.s2},t3={.s3=&x.s3};
setValue( &t1, 1);
setValue( &t2, 2);
setValue( &t3, 3);
}
printf("%d %d %d\n",x.
s1.
Value,x.
s2.
Value,x.
s3.
Value);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCnR5cGVkZWYgc3RydWN0IE1haW5TdHJ1Y3QgewoKICAgIHN0cnVjdCBTdWJTdHJ1Y3QxIHsKICAgICAgICBpbnQgVmFsdWU7CiAgICB9IHMxOwoKICAgIHN0cnVjdCBTdWJTdHJ1Y3QyIHsKICAgICAgICBpbnQgVmFsdWU7CiAgICB9IHMyOwoKICAgIHN0cnVjdCBTdWJTdHJ1Y3QzIHsKICAgICAgICBpbnQgVmFsdWU7CiAgICB9IHMzOwoKfSBNYWluU3RydWN0X3Q7Cgp0eXBlZGVmIHVuaW9uIHsKICAgIHN0cnVjdCBTdWJTdHJ1Y3QxICpzMTsKICAgIHN0cnVjdCBTdWJTdHJ1Y3QyICpzMjsKICAgIHN0cnVjdCBTdWJTdHJ1Y3QzICpzMzsKICAgIGludCBWYWx1ZTsKfSBUOwoKdm9pZCBzZXRWYWx1ZSggVCAqKnQsIGludCBpICkKewogICgqdCktPlZhbHVlPWk7Cn0KCmludCBtYWluKCkKewogICAgTWFpblN0cnVjdF90IHg7CiAgICBwcmludGYoIiVkICVkICVkXG4iLHguczEuVmFsdWUseC5zMi5WYWx1ZSx4LnMzLlZhbHVlKTsKCiAgICB7CiAgICAgICAgVCB0MT17JnguczF9LHQyPXsuczI9JnguczJ9LHQzPXsuczM9JnguczN9OwoKICAgICAgICBzZXRWYWx1ZSggJnQxLCAxKTsKICAgICAgICBzZXRWYWx1ZSggJnQyLCAyKTsKICAgICAgICBzZXRWYWx1ZSggJnQzLCAzKTsKICAgIH0KCiAgICBwcmludGYoIiVkICVkICVkXG4iLHguczEuVmFsdWUseC5zMi5WYWx1ZSx4LnMzLlZhbHVlKTsKCiAgICByZXR1cm4gMDsKfQo=