当在不同大小写的情况下声明相同的变量名时,为什么会收到警告。
switch()
{
case 1:
int a;
break;
case 2:
int a;
break;
}
Run Code Online (Sandbox Code Playgroud)
有没有办法在没有警告的情况下执行此操作。(不将其放在开关前)
mol*_*ilo 10
原因是两个声明的词法范围都是整个switch主体;所有案例都具有相同的范围。
也就是说,就词汇范围而言,这就像写作
{
int a;
int a;
}
Run Code Online (Sandbox Code Playgroud)
解决方案是将声明包含在另一个支撑范围内。
switch(whatever)
{
case 1:
{
int a;
break;
}
case 2:
{
int a;
break;
}
}
Run Code Online (Sandbox Code Playgroud)
(无论将break括号放在里面还是外面,大部分都取决于品味。我更喜欢将整个盒子都包括在内。)
这样做的原因与该“无开关”代码段起作用的原因相同:
{
{
int a;
}
{
int a;
}
}
Run Code Online (Sandbox Code Playgroud)