#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
union members {
int * intp;
char * charp;
double doublev;
} ;
struct group {
int lastunionmember;
union members x;
} ;
struct group f1( void ) {
struct group r = { 0 } ;
if ( choice == 0 ) {
r.
x .
intp = malloc ( sizeof ( int ) ) ; // remember to free(intp) at some time * r.x .intp = 42 ;
r.lastunionmember = 1 ;
}
if ( choice == 1 ) {
r.
x .
charp = malloc ( 42 ) ; // remember to free(charp) at some time strcpy ( r.
x .
charp , "forty two" ) ; r.lastunionmember = 2 ;
}
if ( choice == 2 ) {
r.x .doublev = 3.14159 ;
r.lastunionmember = 3 ;
}
return r;
}
int main( void ) {
struct group x;
for ( int k = 0 ; k < 20 ; k++ ) {
x = f1( ) ;
switch ( x.lastunionmember ) {
default : printf ( "invalid value\n " ) ; break ; case 1 : printf ( "int value is %d\n " , * x.
x .
intp ) ; break ; case 2 : printf ( "string is \" %s\" \n " , x.
x .
charp ) ; break ; case 3 : printf ( "double value is %f\n " , x.
x .
doublev ) ; break ; }
}
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8dGltZS5oPgoKdW5pb24gbWVtYmVycyB7CiAgICBpbnQgKmludHA7CiAgICBjaGFyICpjaGFycDsKICAgIGRvdWJsZSBkb3VibGV2Owp9OwpzdHJ1Y3QgZ3JvdXAgewogICAgaW50IGxhc3R1bmlvbm1lbWJlcjsKICAgIHVuaW9uIG1lbWJlcnMgeDsKfTsKCnN0cnVjdCBncm91cCBmMSh2b2lkKSB7CiAgICBzdHJ1Y3QgZ3JvdXAgciA9IHswfTsKICAgIGludCBjaG9pY2UgPSByYW5kKCkgJSAzOwoKICAgIGlmIChjaG9pY2UgPT0gMCkgewogICAgICAgIHIueC5pbnRwID0gbWFsbG9jKHNpemVvZiAoaW50KSk7IC8vIHJlbWVtYmVyIHRvIGZyZWUoaW50cCkgYXQgc29tZSB0aW1lCiAgICAgICAgKnIueC5pbnRwID0gNDI7CiAgICAgICAgci5sYXN0dW5pb25tZW1iZXIgPSAxOwogICAgfQogICAgaWYgKGNob2ljZSA9PSAxKSB7CiAgICAgICAgci54LmNoYXJwID0gbWFsbG9jKDQyKTsgLy8gcmVtZW1iZXIgdG8gZnJlZShjaGFycCkgYXQgc29tZSB0aW1lCiAgICAgICAgc3RyY3B5KHIueC5jaGFycCwgImZvcnR5IHR3byIpOwogICAgICAgIHIubGFzdHVuaW9ubWVtYmVyID0gMjsKICAgIH0KICAgIGlmIChjaG9pY2UgPT0gMikgewogICAgICAgIHIueC5kb3VibGV2ID0gMy4xNDE1OTsKICAgICAgICByLmxhc3R1bmlvbm1lbWJlciA9IDM7CiAgICB9CiAgICByZXR1cm4gcjsKfQoKaW50IG1haW4odm9pZCkgewogICAgc3RydWN0IGdyb3VwIHg7CiAgICBzcmFuZCh0aW1lKDApKTsKICAgIGZvciAoaW50IGsgPSAwOyBrIDwgMjA7IGsrKykgewogICAgICAgIHggPSBmMSgpOwogICAgICAgIHN3aXRjaCAoeC5sYXN0dW5pb25tZW1iZXIpIHsKICAgICAgICAgICAgZGVmYXVsdDogcHJpbnRmKCJpbnZhbGlkIHZhbHVlXG4iKTsgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMTogcHJpbnRmKCJpbnQgdmFsdWUgaXMgJWRcbiIsICp4LnguaW50cCk7IGJyZWFrOwogICAgICAgICAgICBjYXNlIDI6IHByaW50Zigic3RyaW5nIGlzIFwiJXNcIlxuIiwgeC54LmNoYXJwKTsgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMzogcHJpbnRmKCJkb3VibGUgdmFsdWUgaXMgJWZcbiIsIHgueC5kb3VibGV2KTsgYnJlYWs7CiAgICAgICAgfQogICAgfQp9Cg==