> >>502は正しいよ。実際、flexible array memberについては完全にその通りだし。


Flexible Array Memberが規格化される前は要素数を空に書けなかったので

struct Packet {
int length;
char data[1];
};

要素数に1とか書いて今でいうFlexible Array Memberと同様の使い方をすることを Struct Hack とか呼んでたけど、現代のコンパイラは未定義動作を積極的に最適化に利用するようになったので要素数を1と定義した配列の[0]以外にアクセスするのは未定義動作となるため結果はどうなるか分からないいわゆる「鼻から悪魔」なので Struct Hack を使ってるコードは今どきの処理系では再利用性は低くなってしまっている。
gcc なんかでは救済措置として不具合を出さないためのコンパイルオプションが用意されてたりもするけど環境依存の話でしかないし C言語として正しいわけではない。