>>549
× > 動作してるよう見えるから問題ない
○ 動作したから問題ない
当たり前だが、書いた当人は、書いた環境で動作確認してる。
そして、その記法で動くから、その記法が広まり、仕様として追認する事になった。

というかそもそも「未定義」の定義が違うのかと思ってる。

Rust信者の未定義:何をやってもいい。
 [1]と宣言された場合、[2]以降は未定義となり、
 全部0返しても、また時々でランダムな値を返しても、全く問題ないし、むしろRustコンパイラならこうあるべき。
 未定義に抵触したコードが動く事自体が悪。
 だからむしろ意図的に動かないコードを吐いて明示的にエラーを発生させるべき。

Cの未定義:規定しないので、実装側で都合のいい動作で構わない。
 (=実装上楽な仕様=他動作と同じ実装となり、[0]でも[1]でも動く。だから広まった)

そもそも[x]についてはアドレス計算してるだけなので、範囲超えても、勿論負の添字でも普通に動く。
(だから未定義なのかこれ?という疑問は俺にはあるが、まあこの辺の法的解釈は仕様に詳しい人に任せる。
ただ物理配列でアドレス計算するだけ”以外の”実装にするには、滅茶苦茶手間がかかり、誰もやってないのが実状で、
だからこそ多分全部の環境で動いたから、普通に広まったのだと思うが)

まあでも、この辺のCの文化を気に入らなければ、Cを使わない、Cのコードを流用しない、が最適解だよ。
仮に俺が糞コードをCで書いたとしても、お前がCを使わず流用もしなければ、お前に何も問題は発生しない。これでいいだろ。