TA贡献1772条经验 获得超5个赞
goto是无条件跳转,只能在goto语句出现处改变控制流,无法通过本身返回。要用goto返回,可以定义多个label,在不同位置配合不同label使用goto语句。label在函数内定义,作用域就是整个函数,和其它名称一样无法改变。由于不是左值,它没有生存期,仅在编译期有意义。----everyone998 错误。编译器至少会对label标识符进行语义检查。函数调用和goto是不同的。函数调用或返回时,一般的实现中需要根据调用约定清理堆栈。调用时先保存现场,复制实际参数,然后才是跳转,并不是直接无条件跳转那么简单。也因此goto语句无法跨函数跳转。
TA贡献1866条经验 获得超5个赞
goto就是强制跳转,不具有智能性,编译器不会检测错误,for,while等语句实现的方法其实是在结束处使用一个if语句后goto到开头,而所谓的函数其实在调用函数和函数结尾处使用goto语句。C++里面如果在goto调用以及目标语句间有新的定义并且使同级等情况的编译器会报错,否则编译器不会管。goto语句如果想结束的话可以仿照函数的写法在返回的地方在加个goto语句。不过一般不要用,goto语句时用来跳出多重循环的,不然很容易错误。
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;}
举报