C言語死すべき、goto文死すべき、なのか

こいつの件だ
Behind iPhone's Critical Security Bug, a Single Bad 'Goto' | WIRED

if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0)
    goto fail;
    goto fail;
if ((err = SSLHashSHA1.final(&hashCtx, &hashOut)) != 0)
    goto fail;

よく訓練された日本のSIerならこう思うのだ。
「なぜif分岐したコードを{}で囲わない?うちのコーディングルールでは…」(当然次のifはelse ifである。elseの時にしか通らないのは自明であっても処理がgotoやreturnしかない時は例外などというルールはない)
アホらしいと思う人もいるかもしれないが、フール・プルーフとなるルールはアホな間違いから人を救うのである。

じゃないよな。こういうのはIDE(と言うかコードチェックツール)がぺぺっと警告していくれるべきだ。

C言語はそりゃあ例外機構を持った言語から見ると低級極まりない言語で死すべきと言われてしまうのもわからんではない。CやってJavaやって例外覚えてようやく「あ、goto文って便利ね」って思った。スパゲティの元凶と思ってたけど使い方が悪いのかーって。

残念ながらJava(なり別のもう少し高級な言語)においてこれと同レベルのコーディングミスが言語仕様上起きないなんてことはない。制御条件の誤りと捉えたらどんな言語でも発生しうる。ただ、検出しやすいかどうかの差異にすぎないし、ぶっちゃけこれを見逃すのはテストのカバレッジの問題にすぎない。

とはいえ、業務アプリの世界から「Cだと速い(はず…)」という理由でC言語が生き残っているのはちょっと遺憾。