到達不可能なコードがあっても良い

Javaだと以下のコードはコンパイルできません。

public class Foo {
    public int bar() {
        return 0;
        return 1;
    }
}

なぜなら1つ目のreturn文が必ず実行されるため、それ以降のコード(2つ目のreturn文)には処理が絶対に到達しないということをコンパイラが判定するためです。

しかしC言語では以下のコードをコンパイル・実行できます。

#include <stdio.h>

int main()
{
  printf("hogehoge\n");
  return 0;
  printf("fugafuga\n");
  return 0;
}

まあコードを書いたり改変したりする立場からするとこういう言語仕様のほうが楽ですね。弊害もあるのでしょうけど。