プログラムがあります。
int i=10;
main()
{
extern int i;
{
int i=20;
{
const volatile unsigned i=30;
printf("%d ",i);
}
printf("%d ",i);
}
printf("%d\n",i);
}
出力: 30 20 10
このプログラムを見たとき、このプログラムはエラーになると思いました。同じ名前のシンボル(変数)を作成することはできません。ブロックの下にシンボルを作成していても、すでにグローバル シンボルとして作成されています。
コンパイラは、同じ名前のグローバル シンボルとローカル シンボルをどのように区別できますか?