case语句仅仅是’labels’而已,意味着编译器解释case的时候,会jump到其他地方(在这里是其它labels).
当时你定义的变量a的作用域却没有结束,a的作用域是从声明a开始,到main结束为止.
作用域未结束,而你可能会定义a,这就不合法了.所以你必须确保如果你跳过了此标签,作用域也要跟着结束.
又如
** if( statements )**
** int a = 2;**
** else**
** int a = 4;**
a出了作用域,所以是合法的,如果这语句的作用是跟labels一样明显也是不行的.
\#include "stdafx.h"\
\
int main(){\
char c;\
cin \>\> c;\
// Error.\
switch( c )\
{\
case 'a':\
int a = 'a'; // error C2360: “a”的初始化操作由“case”标签跳过.\
cout \<\< a \<\< endl;\
break;\
case 'b':\
int b = 'b';\
cout \<\< b \<\< endl;\
break;\
}\
/\*\
// Correct.\
switch( c )\
{\
case 'a':\
{\
int a = 'a';\
cout \<\< a \<\< endl;\
break;\
}\
case 'b':\
{\
int b = 'b';\
cout \<\< b \<\< endl;\
break;\
}\
}\
\*/\
\
}