书上例子如下:
1、
在编译时,将图中两行注释起来编译,是正确的,当去掉goto的注释后,会得到如下报错
即,跳过了x1的初始化,注释掉x1的初始化语句后通过
问题出现在将第二个case的注释打开之后,得到如下错误:
从提示上看是一个问题
2、
神奇的地方,在于,注释掉x2的初始化语句或者case2时,能编译通过
3、正确的
然后,我们修改代码如下:
通过编译,搞定
总结:主要问题在于:
1、编译器会检查有没有把对象定义放在一个条件块中,比如switch和goto,第一个是goto或者switch跳过了x1的定义
2、对于switch。在switch语句内定义一个变量的时候,如果不在一个语句块内,它作用域是直到遇到switch的"}"才结束的,而case语句则可能跳过定义它的整个作用域。
所以,在这里,定义加上括号,让它在case的}处作用域结束即可
http://hi.baidu.com/ati_crossfire/blog/item/e2bb6b10023119d6a6ef3f32.html
留存备份