typedef enum {
InfoKindVersion,
InfoKindName
} InfoKind;
//tagged union: the payload depends
//on the kind
typedef struct {
InfoKind kind;
union {
struct {
int major, minor, build;
} version;
char name[41];
} payload;
} ProgramInfo;
void printInfo(ProgramInfo info) {
switch (info.kind) {
case InfoKindVersion:
NSLog(@"version: %d.%d.%d",
info.payload.version.major,
info.payload.version.minor,
info.payload.version.build);
break;
case InfoKindName:
NSLog(@"name: %s",
info.payload.name);
break;
}
}
ProgramInfo info;
info.kind = InfoKindName;
strcpy(info.payload.name, "CCDEditor");
printInfo(info);
info.kind = InfoKindVersion;
info.payload.version.major = 3;
info.payload.version.minor = 5;
info.payload.version.build = 25467;
printInfo(info);