なぜこれを行うことが許可されているのか混乱しています(ifステートメントはスコープを示すだけです):
int i = 0;
if(true)
{
float i = 1.1;
}
私は ac# のバックグラウンドを持っていますが、このようなことは許可されていません。基本的に、プログラマーは変数「i」を再宣言しているため、「i」に新しい意味が与えられます。任意の洞察をいただければ幸いです。
ありがとう!
なぜこれを行うことが許可されているのか混乱しています(ifステートメントはスコープを示すだけです):
int i = 0;
if(true)
{
float i = 1.1;
}
私は ac# のバックグラウンドを持っていますが、このようなことは許可されていません。基本的に、プログラマーは変数「i」を再宣言しているため、「i」に新しい意味が与えられます。任意の洞察をいただければ幸いです。
ありがとう!
C (および拡張により、Objective C) では、外側のスコープの変数を隠す内側のスコープでローカル変数を宣言することが許可されています。if
これを取り除いて書くことができます:
int i = 0;
{
// Here, the outer i becomes inaccessible
float i = 1.1;
{
int i = 2;
printf("%d", i); // 2 is printed
}
}
C# 標準ではエラーになる可能性が高いためか、これに反対しましたが、C/Objective C では問題ありません。
ビルド設定で「非表示のローカル変数」をオンにすると、警告が表示されます。
はい、それはi
新しい意味を与えますが、変数を再宣言していません。それは別の変数です。ただし、識別子が同じであるため、現在のスコープは前のスコープを「非表示」にするため、i
そのブロック内での使用は float を参照します。