int a;
int a;
int a;
int a;

int main()
{
  a = 10;
  return 0;
}

このソースがコンパイル通ってしまうことに気づいて愕然としたんですが・・・
このような表記が許されている理由がわかる人はいますか?