导航
  • 主页
  • VC/MVC基础类
  • .NET 技术
  • VC/MFC界面
  • VC/MFC 进程
  • VC/MFC 数据库
  • VC/MFC&Web
  • Doc/View
  • VC++技术资源

为什么在switch中定义变量,会有警告?

cy010510630 2010-07-03 02:38:44
    switch (i)
{
case 1:
cout << "i is equal to 1" << endl;
break;
case 2:
cout << "i is equal to 2" << endl;
break;
case 3:

cout << "i is equal to 3" << endl;
int j = i + 1;
cout << "j = " << j;
break;

default:
cout << "i is not equal to 1, 2, or 3." << endl;
break;
}


变量在最近的一个{}中有效,那么上面这样做没有什么不合适的啊?
我就是想让一个变量在switch中有效,在switch后无效。
为什么非要在case3之间再加个{}警告才会消失?
...全文
153 点赞 收藏 16
写回复
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
cy010510630 2010-07-05
感谢各位回答。我在理解理解。
结账
回复
yhp1888 2010-07-04
[Quote=引用 4 楼 liweisdut 的回复:]
编译器把你的一个case当成一块,所以若是在其中有变量定义的话会给出警告:本变量只在本case中可用
[/Quote]

[Quote=引用 8 楼 jiakai1000 的回复:]
加了{}表示:只有当程序运行到这个case了,才会从栈上申请局部变量的空间并初始化,运行不到就不分配空间,避免浪费
[/Quote]

楼上正确。

其实楼主只要记住,这样做行不通,那样做行得通,大脑再想一下,就行了。

有警告就是表示有问题。

回复
liutengfeigo 2010-07-04
在switch中定义变量本来就不是一个好做法
回复
花熊 2010-07-04
int j = i + 1;这有问题,把int j提到最前面定义,不要在case中定义
回复
jijun1018 2010-07-04
主要是定义变量内存的关系,不过不用{}括起来,编译器不能确定程序员所认为的变量的生存周期,没办法自动分配和销毁内存,填上括号就等于给出了这个范围。
回复
schlafenhamster 2010-07-04
C和C++不同,C要求先定义,C++是随用随定义。所以会有以上问题。除了加{},你也可以把变量放switch前。
回复
Eleven 2010-07-04
加括弧即可。。。
回复
C瓜哥 2010-07-04
switch中不能定义变量,除非有大括号括起来
回复
jiakai1000 2010-07-03
加了{}表示:只有当程序运行到这个case了,才会从栈上申请局部变量的空间并初始化,运行不到就不分配空间,避免浪费
回复
cy010510630 2010-07-03
如果是因为程序也许运行不到 3 的这种情况 所以编译器给了个警告
那么,为什么加了一个{}
case 3:
{
cout << "i is equal to 3" << endl;
int j = i + 1;
cout << "j = " << j;
}
就没有警告了呢?
加了{},case 3的情况还是不一定能运行到。
回复
superdiablo 2010-07-03
很正常,因为程序不一定能运行到那个地方。改成这样就可以了:
case 3:
{
cout << "i is equal to 3" << endl;
int j = i + 1;
cout << "j = " << j;
}
break;
回复
stonewater 2010-07-03
警告不是有原因吗?一看就知道了,需然有的原因是解释不对,但大部分还是一看就能明白的
回复
liweisdut 2010-07-03
编译器把你的一个case当成一块,所以若是在其中有变量定义的话会给出警告:本变量只在本case中可用
回复
liweisdut 2010-07-03
[Quote=引用楼主 cy010510630 的回复:]
C/C++ code
switch (i)
{
case 1:
cout << "i is equal to 1" << endl;
break;
case 2:
cout << "i is equal to 2" << endl;
bre……
[/Quote]
要在switch里使用,放在case 3的执行代码中肯定不行。而且你加了括号之后,只能在case 3一种条件下使用,其他不认识
回复
wade_2003 2010-07-03
不要理会警告,只要结果正确
回复
zuiyuezhou888 2010-07-03
程序也许运行不到 3 的这种情况 所以编译器给了个警告
不用管它 就像你定义了一个变量没有使用一样 编译器也会给一个警告
回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告
暂无公告