为什么在switch的case中声明的变量不能赋初值

淘淘 2011-11-23 02:37:37
首先声明一下我用的是ppc的gcc编程,还有就是我是新手……
我用gcc写程序的时候在switch的case声明了一个变量,但是赋初值就报错,例如:
switch(...){
case 1:
int a = 1;
return 0;
...
}
就会报错:
(.cpp中同一switch的下一个case所在行)jump to case label
(.cpp中'int a'所在行)crosses initialization of 'int a'
...
之后的每个case或是default都会报错就像上边的
请问电脑的vc也会这样报错么?为什么呢?
...全文
353 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
proorck6 2011-11-23
  • 打赏
  • 举报
回复
C语言标准的问题,用3楼的办法应该可以解决
加对大括号就行了。
lyqf365 2011-11-23
  • 打赏
  • 举报
回复
首先如果是纯C一般要求要在函数的开头声明变量,C编译器比较简单吧,这样堆栈处理容易些。
另外,C++的变量作用域是以{开始到对应的}结束的。内部变量会屏蔽外部变量。
在switch和其他的一些条件语句中声明变量一定要注意不要穿越了,用{}加一个作用域吧~如果多个条件用到同一个变量,可以考虑写在函数全局有效作用域里。如果是指针还要检查指针,如果有内存管理代码,最好将悬空的指针置成null
柯本 2011-11-23
  • 打赏
  • 举报
回复
我现在所参考的,基本来自C/C++标准文档(ISO)因为它理论是应该是最权威的
不过对不同编译器要经测试才行,因为编译器不完全支持标准的(gcc应该是对标准支持最好的)
至于其它参考书,可参考下:
http://topic.csdn.net/u/20101204/01/231e7724-5217-431c-ad44-c3adfa36add8_12.html?seed=1580178672&r=76594557#r_76594557
何日人再来 2011-11-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 crazy_lee 的回复:]
谢谢楼上三位,那请问你们在那里看到的这些细节规定?推荐本书好么?我看的书讲的都很笼统,给推荐些,谢谢!
[/Quote]
百度啊
淘淘 2011-11-23
  • 打赏
  • 举报
回复
谢谢楼上三位,那请问你们在那里看到的这些细节规定?推荐本书好么?我看的书讲的都很笼统,给推荐些,谢谢!
龙行天下之Sky 2011-11-23
  • 打赏
  • 举报
回复
{
int a = 1;
return 0;
}
改成这样试试
柯本 2011-11-23
  • 打赏
  • 举报
回复
这个是规定,加对{}就可以了
switch(...){
case 1:
{
int a = 1;
return 0;
}
...
}


ma100 2011-11-23
  • 打赏
  • 举报
回复
没为什么,就这么规定的, 要么放外面去, 要么加{}

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧