struct AB {
 int a;
 int b;
} ab;

struct AB *pab;
int *a, *b;

pab = &ab;
a = &(ab.a);
b = &(ab.b);

printf("%d %d %d", (int)a - (int)pab, (int)b - (int)pab - sizeof(int), (int)b - (int)a - sizeof(int));

この時出力が0 0 0になることは保障された動作ですか?
つまり構造体のアドレスとメンバのアドレスの関係を知りたい
(構造体のアドレスから上のメンバから順に詰められてるのは絶対かということ)