// 省略 include <stdio.h>, <stdlib.h>
#define offsetof(type, member) ((unsigned int) &(((type*)0)->member))
#define N 100

typedef struct unko {
 union {
  struct {
   int first;
   int second;
  };
  int v[0];
 };
} Unko;

int main() {
 Unko *u;
 u = (Unko*) malloc(offsetof(Unko, v) + sizeof(int) * N);
 u->first = 334;
 u->second = 666;
 printf("first=%d, second=%d\n", u->v[0], u->v[1]);
 return 0;
}

このコードなんですが、規格上、
&(u->v[0]) == &(u->first)、&(u->v[1]) == &(u->second) になり、
正しく動作することは保障されるでしょうか?ご教示お願いします。