使用した変数の新しいスコープを作成します。変数のスコープは扱いにくい場合があります。たとえば、投稿したコードでは。
switch(x)
{
case(a):
{
int i = 0;
}
break;
case(b):
i = 1; // Error: The name 'i' doesn't exist in the current context
break;
}
case(b)
変数a
がスコープ外でアクセスされるため、エラーはここで理にかなっています。一方では、
switch(x)
{
case(a):
{
int i = 0;
}
break;
case(b):
int i = 1; // Error: A local variable named 'i' cannot be declared in this scope because it would give a different meaning to 'i', which is already used in a 'child' scope to denote something else
break;
}
上記の 2 つのエラーは互いに矛盾しているように見えます。これを回避するには、両方の case ステートメントでスコープを個別に定義する必要があります。
switch(x)
{
case(a):
{
int i = 0;
}
break;
case(b):
{
int i = 1; // No error
}
break;
}
Eric Lippert は、彼のブログへの非常に優れたリンクを共有して、case ステートメントでの変数のスコープを説明しています。あなたはそれを見てください。