| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2832 人关注过本帖
标题:goto的错误用法
只看楼主 加入收藏
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
收藏
得分:0 
我也没办法了
问一下,金币干什么用的?

嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-07-16 17:24
aogun
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:638
专家分:0
注 册:2006-4-5
收藏
得分:0 
c++ primer中的原话:
把一条声明语句放在与case 或default 相关联的语句中是非法的,除非它被放在一个语句块中,例如,下列代码将导致编译时刻错误
case illegal_definition:
// 错误: 声明语句必须被放在语句块中
string file_name = get_file_name();
// ...
break;
如果一个定义没有被包围在一个语句块中那么它在case 标签之间是可见的,但是只有当定义它的case 标签被执行时它才能被初始化。因此需要一个语句块来保证名字是可见的,并且也只有这个语句块才能够使用它(而且可以保证它只在这个语句块中才能被初始化),为了使我们的程序能通过编译必须引入语句块

xupeng,你的金币还是留着吧,回答问题并不是想要你的金币

song4,不知道我对你说的是不是理解了,按照你的话,是不是编译器分析出如果goto最终没有跳过初始化的话那就是正确的,那么下面的程序:
[CODE]#include <iostream>
using namespace std;
void main()
{
goto RET3;
RET1:
RET2:
int x = 0;
goto RET4;
RET3:
goto RET1;
RET4:
cout<<x<<endl;
}[/CODE]
其中int x=0最终是没有越过的,但是仍然是错误的

世界上总共有 10 种人,一种懂得什么是二进制 ,一种不懂。
2006-07-17 09:03
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
收藏
得分:0 
goto RET3;
不是越过了么

嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-07-17 10:02
xupeng
Rank: 1
等 级:新手上路
帖 子:4049
专家分:0
注 册:2006-2-12
收藏
得分:0 

谢谢!

aogun:我们还没讨论完呢,你就结贴了,song4,关于这个问题就不讨论了吧,其实没什么意义,在c++ primer中也是从运行方面的角度来解释的,而且在实际编程中基本没有这个问题,这基本上也可以算是一条规则了,对一条规则考虑过多的原因现在还没什么意义,除非你以后开发编译器
当然,如果你觉得还有讨论的必要你可以重开一贴


反清复明 http://xupeng.
2006-07-17 10:04
快速回复:goto的错误用法
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018618 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved