谁能说一下goto语句的实现?

coolness 2009-12-17 05:13:26
谁能说一下goto语句的实现?其次代码风格上是否要避免使用goto语句。
...全文
756 45 打赏 收藏 转发到动态 举报
写回复
用AI写文章
45 条回复
切换为时间正序
请发表友善的回复…
发表回复
Daven172 2009-12-20
  • 打赏
  • 举报
回复
汇编 jmp
redleaves 2009-12-20
  • 打赏
  • 举报
回复
不会用goto的C程序员,是不合格的C程序员.
gumoon88 2009-12-20
  • 打赏
  • 举报
回复
goto error;
Pengxiao_nt 2009-12-20
  • 打赏
  • 举报
回复
goto 跳出多层嵌套是非常好用的。十分方便。
我就很喜欢用goto
东大坡居士 2009-12-19
  • 打赏
  • 举报
回复
学习学习~~~
yjqidai 2009-12-19
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 do_fork 的回复:]
引用 15 楼 lovesi3344 的回复:
if you use "goto",you will be fired by manager!!!
如果你使用goto,你将会被经理开除(解聘)。


if your manager told you this, he will be fired by the Final BOSS
[/Quote]


精通与非精通的对话...

大部分看到的是短处,而他却看到短处之间还有好处...
ouyangyi124 2009-12-19
  • 打赏
  • 举报
回复
存在即是合理.可以适当的用用
yzx714 2009-12-19
  • 打赏
  • 举报
回复
goto是罪恶,但有些时候不得不罪恶一点
skyworth98 2009-12-19
  • 打赏
  • 举报
回复
sp

[Quote=引用 16 楼 do_fork 的回复:]
引用 15 楼 lovesi3344 的回复:
if you use "goto",you will be fired by manager!!!
如果你使用goto,你将会被经理开除(解聘)。


if your manager told you this, he will be fired by the Final BOSS
[/Quote]
zzzhktk 2009-12-19
  • 打赏
  • 举报
回复
#include<stdio.h>
void main()
{
int ia,ib,ic;
scanf("%d",&ia);
if(ia==1)
goto error;
printf("0000");
error:
printf("1522552135");
getch();
}
  • 打赏
  • 举报
回复
在不能在合适的地方使用的人眼里,此方法就是鸡肋,用了就万恶不赦
alexhilton 2009-12-18
  • 打赏
  • 举报
回复
可能是汇编的jmp指令。
但是goto只限于局部跳转。
函数间的跳转可以用

#include <setjmp.h>
setjmp( jmp_buf );
longjmp( jmp_buf, ret );
ZXW0521 2009-12-18
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 do_fork 的回复:]
引用 7 楼 zxw0521 的回复:
引用 4 楼 do_fork 的回复:
一味的避免goto,跟滥用goto一样有害


见过的一些goto语句,最大的作用,是在程序执行中,跳到末尾处理错误之类的,
这个可以用
while(0)
{
break;
}
来代替,


下面这个,用goto就比较方便,其它方式反而破坏可读性和性能。
C/C++ codestaticstruct fdtable* alloc_fdtable(unsignedint nr)
{struct fdtable*fdt;char*data;

nr/= (1024/sizeof(struct file*));
nr= roundup_pow_of_two(nr+1);
nr*= (1024/sizeof(struct file*));if (unlikely(nr> sysctl_nr_open))
nr= ((sysctl_nr_open-1)| (BITS_PER_LONG-1))+1;

fdt= kmalloc(sizeof(struct fdtable), GFP_KERNEL);if (!fdt)gotoout;
fdt->max_fds= nr;
data= alloc_fdmem(nr*sizeof(struct file*));if (!data)goto out_fdt;
fdt->fd= (struct file**)data;
data= alloc_fdmem(max_t(unsignedint,2* nr/ BITS_PER_BYTE, L1_CACHE_BYTES));if (!data)goto out_arr;
fdt->open_fds= (fd_set*)data;
data+= nr/ BITS_PER_BYTE;
fdt->close_on_exec= (fd_set*)data;
INIT_RCU_HEAD(&fdt->rcu);
fdt->next= NULL;return fdt;

out_arr:
free_fdarr(fdt);
out_fdt:
kfree(fdt);out:return NULL;
}
[/Quote]

这个确实是用goto的好场合,
其实在学汇编时我也老jmp的,
就是遇到跳来跳去的地方,
会弄的乱糟糟
建鼎呓语 2009-12-18
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zxw0521 的回复:]
引用 4 楼 do_fork 的回复:
一味的避免goto,跟滥用goto一样有害



见过的一些goto语句,最大的作用,是在程序执行中,跳到末尾处理错误之类的,
这个可以用
while(0)
{
break;
}
来代替,


[/Quote]

应该是下面的代码,否则while循环都不会进去

do
{
break;
} while(0);
sicxun 2009-12-18
  • 打赏
  • 举报
回复
我这辈子只用过一次
还是学习语法时用的
liqiang123abc 2009-12-18
  • 打赏
  • 举报
回复
小型软件可以使用GOTO
大型 软件 最好 不用它
出了问题 会非常麻烦,,
充电宝111 2009-12-18
  • 打赏
  • 举报
回复
没有一个人知道goto语句的好,只有8楼!
febbird1984 2009-12-18
  • 打赏
  • 举报
回复
见过使用的场合是在一个函数中执行大量文件读写操作的时候,跳转到文件操作失败以后的处理
赵4老师 2009-12-18
  • 打赏
  • 举报
回复
计算机组成原理→DOS命令→汇编语言→C语言、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言、架构……
masm615 2009-12-18
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 cattycat 的回复:]
linux下setjmp和longjmp
[/Quote]
这个我记得是C标准里面的。。。
==========分割线============
goto是给高手用的,不适合咱们小盆右。。。
在内核、库的实现里可能会有很多。。。
加载更多回复(26)

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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