为了账号安全,请及时绑定邮箱和手机立即绑定

C++里 goto语句用法?

C++里 goto语句用法?

哆啦的时光机 2019-02-20 10:15:06
比如他goto到一个label1处,开始从label1处运行,什么时候结束这个goto反回引发goto的起始位置?,另外label可以有结束定义语句吗?
查看完整描述

3 回答

?
月关宝盒

TA贡献1772条经验 获得超5个赞

goto是无条件跳转,只能在goto语句出现处改变控制流,无法通过本身返回。要用goto返回,可以定义多个label,在不同位置配合不同label使用goto语句
label在函数内定义,作用域就是整个函数,和其它名称一样无法改变。由于不是左值,它没有生存期,仅在编译期有意义。
----
everyone998 错误。编译器至少会对label标识符进行语义检查。函数调用和goto是不同的。函数调用或返回时,一般的实现中需要根据调用约定清理堆栈。调用时先保存现场,复制实际参数,然后才是跳转,并不是直接无条件跳转那么简单。也因此goto语句无法跨函数跳转。

查看完整回答
反对 回复 2019-03-26
?
心有法竹

TA贡献1866条经验 获得超5个赞

goto就是强制跳转,不具有智能性,编译器不会检测错误,for,while等语句实现的方法其实是在结束处使用一个if语句后goto到开头,而所谓的函数其实在调用函数和函数结尾处使用goto语句。C++里面如果在goto调用以及目标语句间有新的定义并且使同级等情况的编译器会报错,否则编译器不会管。
goto语句如果想结束的话可以仿照函数的写法在返回的地方在加个goto语句。不过一般不要用,goto语句时用来跳出多重循环的,不然很容易错误。

查看完整回答
反对 回复 2019-03-26
?
慕妹3242003

TA贡献1824条经验 获得超6个赞

goto其实是程序运行完后,在return前,再执行goto语句的,给你个例子参考,你用F10但不单步调试下就知道了
int main()
{
int ap =0;
while(cin>>ap)
{
if (ap>0)
{
goto p1;
p1:
cout<<"greater than zero\n";
}
else
{
goto p2;
p2:
cout<<"less than zero\n";
}
}

return 0;
}



查看完整回答
反对 回复 2019-03-26
  • 3 回答
  • 0 关注
  • 994 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信