>>527

#include <stdio.h>
int main(void) {
volatile int i, arr[10];
for (i = 0; i < 20; i++) arr[i] = (int) main;
printf("Hello\n");
return 0;
}

うちの処理系(VC++2005)でこいつをコンパイルして実行したら、「Hello」がたくさん
表示された挙げ句に落ちた。これは定義された動作とは言えない。
ちなみにvolatileは最適化によるコードの消滅を回避するために必要。


>>528
ほとんどのコンパイラの実装だとまあ問題ないだろうが、それでも標準ではない。
VC++2005だとゼロ配列の定義は禁止されるし、構造体の末尾で宣言しても
非標準の拡張機能とやらで警告される。

万が一添え字を検査するような処理系があったとしたらmallocの余白が後方に
あろうが何だろうが容赦なく落とす可能性もある。