LinuxC语言中goto语句如何替代?

一、goto语句的定义

  • goto 语句,可以实现无条件跳转。goto 语句过于强大了,从程序中的任何地方都可以无条件跳转到任何其它地方,只要在那个地方定义一个标号就行。
  • 唯一的限制是 goto 只能跳转到同一个函数中的某个标号处。
    LinuxC语言中goto语句如何替代?

二、替代goto语句的写法

LinuxC语言中goto语句如何替代?

  • 通常 goto 语句只用于这种场合,一个函数中任何地方出现了错误条件都可以立即跳转到函数末尾做出错处理(例如释放先前分配的资源、恢复先前改动过的全局变量等) ,处理完之后函数返回。

  • 但是除此之外,在任何其它场合都不要轻易考虑使用 goto 语句。

三、C标准库函数 setjmp 和 longjmp 配合起来可以实现函数间的跳转

C标准库函数 setjmp 和 longjmp 配合起来可以实现函数间的跳转,但只能从被调用的函
数跳回到它的直接或间接调用者(同时从栈空间弹出一个或多个栈帧) ,而不能从一个函数
跳转到另一个和它毫不相干的函数中。 setjmp/longjmp 函数主要也是用于出错处理,比如函数 A 调用函数 B ,函数 B 调用函数 C ,如果在 C 中出现某个错误条件,使得函数 B 和 C 继续执行下去都没有意义了,可以利用 setjmp/longjmp 机制快速返回到函数 A 做
出错处理。