关于goto

rchu 2006-09-21 02:58:47
很多高级语言,包括C/C++都支持goto,虽然种种理论都表示goto可以不用,也尽量不应该用。
那么,假设现在要完全禁止C语言中的goto,在已有程序已经用了goto的情况下,有没有尽可能简单的办法(不做太多的词法和语法分析),设计一个自动转换的算法,彻底把goto换成等价的语句呢。
...全文
384 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
fiftymetre 2006-09-28
  • 打赏
  • 举报
回复
记好一个GOTO准则就好。GOTO 只向前跳,不要向后跳,你就不会晕头。

if(a)
goto ERROR;
...
if(b)
goto ERROR;
...
if(c)
goto ERROR;
...

ERROR:


就向这样。
qqqee 2006-09-28
  • 打赏
  • 举报
回复
错误处理的时候,代码清晰一点。
比如:

if(a)
goto ERROR;
...
if(b)
goto ERROR;
...
if(c)
goto ERROR;
...

ERROR:
...
Duwchy 2006-09-23
  • 打赏
  • 举报
回复
goto是要使用得当,也没什么坏处,在一些程序的条件分支或循环里可以适当的使用一些goto语句,也不会怎么影响程序的可读性和所谓的破坏程序结构。
在java里,一般的带条件的循环块在编译后都是转换成使用goto跳转的。
  • 打赏
  • 举报
回复
我居然不会goto的语法,唉~
anomone1208 2006-09-23
  • 打赏
  • 举报
回复
现在都不提倡用goto语句,goto语句使程序的静态结构和程序的动态执行之间有很大的差别,这样使程序难以阅读,难以查错。对一个程序来说,人们最关心的是他运行的正确与否,去掉goto语句后,可以直接从程序结构上反映程序的运行过程。这样,不仅使程序的结构清晰、便于阅读,便于查错,而且也有利于程序正确性的证明。
不加限制地使用goto语句,特别是使用往回跳的goto语句,会使程序的结构难于理解,这种情形应该尽量避免使用goto语句;另外,为了提高程序的效率,同时又不破坏程序的良好结构,有控制地使用一些goto语句是有必要的。
healer_kx 2006-09-21
  • 打赏
  • 举报
回复
我不懂goto了。虽然搞了10年的goto
superarhow 2006-09-21
  • 打赏
  • 举报
回复
通常的做法是用异常机制来代替。还有就是,如果程序不需要退出循环,就用这样的写法:
do
{
在需要goto的地方用break就可以了
} while (FALSE);
label1:
....
weijiangshanwww 2006-09-21
  • 打赏
  • 举报
回复
看吧,当使用了过多的GOTO的时候,程序本身就是个很大的麻烦,如果想要不怎么进行语法分析,我个人有个建议,把 GOTO{....};中的块改成一函数,然后调用该函数。
liujycquc 2006-09-21
  • 打赏
  • 举报
回复
goto语句还是蛮有用的 比如跳出较多层的循环,,,
OOPhaisky 2006-09-21
  • 打赏
  • 举报
回复
首先,goto破坏了程序的良好结构,使得模块不再是“单入单出”,这是很糟糕的事情。
其次,如果想将goto转换掉,同时不改变程序的语义,有办法可以做到,但是方法涉及到数理逻辑和程序设计方法学的相关知识(一旦涉及到数理逻辑,就意味着有很多的公式推导),所以如果想“不做太多的词法和语法分析”,那么只能针对简单的程序逻辑,凭借“经验”来转换,如果想又一个“系统的”方法对包含goto的复杂程序进行转换,则“不做太多的词法和语法分析”是肯定不行的。
sinall 2006-09-21
  • 打赏
  • 举报
回复
如果这个没有什么难度,
goto 早被取消了 ...
————————————————————————————————————————
顶这句!
HappyTree 2006-09-21
  • 打赏
  • 举报
回复
不好替换,有时需要做很大的调整的。
jixingzhong 2006-09-21
  • 打赏
  • 举报
回复
设计一个自动转换的算法,彻底把goto换成等价的语句
==========================
如果这个没有什么难度,
goto 早被取消了 ...
这个自动转换也不需要设计实现了,
因为如果你的这个要求容易实现的话, 那为什么还要使用颇有争议的 goto ?

它的存在就是因为在一些特殊情况带来的简捷,方便 ...
jixingzhong 2006-09-21
  • 打赏
  • 举报
回复
goto 的使用还是具有一定的优势的,
如果要实现自动转换,

倒是可以考虑用 setjmp 和 longjmp 替换 ...

但是这个只能替换那种goto后退,
如果是向前 goto 的方式,
setjmp 和 longjmp 就没有用武之地了 ...
javaman8 2006-09-21
  • 打赏
  • 举报
回复
好像没有什么特别好的方法,不同情况的可能太多了.
突击召唤师 2006-09-21
  • 打赏
  • 举报
回复
本来就是逻辑的转换,分析很复杂的。goto就是因为比较简单才有人用。

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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