3

なぜこれを行うことが許可されているのか混乱しています(ifステートメントはスコープを示すだけです):

int i = 0;
if(true)
{
    float i = 1.1;
}

私は ac# のバックグラウンドを持っていますが、このようなことは許可されていません。基本的に、プログラマーは変数「i」を再宣言しているため、「i」に新しい意味が与えられます。任意の洞察をいただければ幸いです。

ありがとう!

4

4 に答える 4

4

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 では問題ありません。

于 2013-05-07T15:07:03.283 に答える
3

ビルド設定で「非表示のローカル変数」をオンにすると、警告が表示されます。

于 2013-05-07T15:10:35.880 に答える
1

はい、それはi新しい意味を与えますが、変数を再宣言していません。それは別の変数です。ただし、識別子が同じであるため、現在のスコープは前のスコープを「非表示」にするため、iそのブロック内での使用は float を参照します。

于 2013-05-07T15:06:35.267 に答える