/* GCC y la alineación de campos en unions
* Ernesto Hernández-Novich <emhn@usb.ve>
* CI3641 Lenguajes de Programación I
*/
#include <stdio.h>
#include <stddef.h>
typedef struct yin {
int foo;
double bar;
int baz;
} yin;
typedef struct yang {
double qux;
_Bool meh;
char grok[3];
} yang;
typedef struct zen {
_Bool begin;
union {
yin white;
yang black;
};
_Bool end;
} zen;
#define OFF(t,f) printf("\toffset(%s) = %d\n","f",offsetof(t,f));
void main(int argc,char **argv) {
zen master;
printf("sizeof(master) = %d\n", sizeof(master));
printf("Offsets\nBegin:\n");
OFF(zen,begin);
printf("Yin:\n");
OFF(zen,white.foo);
OFF(zen,white.bar);
OFF(zen,white.baz);
printf("Yang:\n");
OFF(zen,black.qux);
OFF(zen,black.meh);
OFF(zen,black.grok);
printf("End:\n");
OFF(zen,end);
}