スタックオーバーフローの仕様

以下の C 言語のプログラムを実行すると、ほとんどの環境では異常終了すると思います。

int main(void) {
  main();
  return 0;
}

この挙動は C の規格としてどのように説明されているんでしょうか。


たぶん未定義じゃないかと思うんですが、C99 の規格書の function call や limitations などを読んでみても、このプログラムが未定義になるという根拠を見つけられませんでした。
もしこのプログラムが valid であるなら、ほとんどの C コンパイラは C の仕様に準拠できていない (というか準拠するのはおそらく不可能) ということになるのでしょうか。


同じような疑問を持つ人はちらほらいるようなのですが、ちゃんとした回答は見つかりません。

誰か C の仕様に詳しい方がいたら、是非教えてください。