在中间情况下声明变量

sch*_*hul 4 c

当在不同大小写的情况下声明相同的变量名时,为什么会收到警告。

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)