goto 语句和标号

goto 语句及标号可能是有害的,但未必全是无用的。

影响控制流程的语句:

  • (1)分支
  • (2)循环
  • (3)goto 无条件跳转

我们知道 break 只能跳出最内层的循环,如果在一个嵌套循环中遇到某个错误条件需要立即跳出最外层循环做错误处理,就可以用到 goto 语句:

for (...)
    for (...){
        ...
        if (出现错误)
            goto error;
    }
error:
    出错处理;

这里的 error:叫做标号(Label),任何语句前面都可以加若干个标号。

goto 语句只能跳转到同一个函数的某个标号处,而不能跳转到其他函数中。滥用 goto 语句会使程序的控制流程非常复杂,可读性很差。

goto 语句不是必须存在的,显然可用其他方法替代,上文的代码可改写为如下形式:

int cond = 0;
for (...){
    for (...){
        ...
        if (出现错误条件){
            cond = 1;
            break;
        }
    }
    if (cond)
        break;
}
if (cond)
    出错处理;

通常 goto 语句只用于这种场合,一个函数中任何地方出现了错误条件都可以立即跳转到函数末尾进行出错处理:

  • (1)释放先前分配的资源
  • (2)恢复先前改动的全局变量。(回滚操作?)

你可能感兴趣的:(goto 语句和标号)