int n;

int foo(int x)
{
 int n;
 ...
}
たとえば上のコードでローカル変数nを宣言し忘れた場合誤動作してしまう。
それを未然に防ぐためにはすべての変数名の重複をなくせば良いわけだが
それをしないのはどうしてだ?