Il crée une nouvelle portée pour les variables que vous avez utilisées. La portée des variables peut parfois être délicate. Par exemple, dans le code que vous avez posté ;
switch(x)
{
case(a):
{
int i = 0;
}
break;
case(b):
i = 1; // Error: The name 'i' doesn't exist in the current context
break;
}
L'erreur a un sens ici comme dans case(b)
variable a
est accessible hors du champ d'application. Maintenant, d'un autre côté,
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;
}
Les deux erreurs ci-dessus semblent contradictoires l'une par rapport à l'autre. Pour contourner ce problème, vous devez définir la portée séparément dans les deux déclarations de cas,
switch(x)
{
case(a):
{
int i = 0;
}
break;
case(b):
{
int i = 1; // No error
}
break;
}
Eric Lippert a partagé un très bon lien vers son blog pour expliquer la portée des variables dans les déclarations de cas. Vous devriez y jeter un coup d'oeil.