❮ C Continue 语句

C 语言函数 ❯

C 语言中的 Goto 语句

更新于 2025/6/7 10:07:17

什么是 C 语言中的 goto 语句?

goto 语句用于将程序控制权转移到同一函数中定义的标签。它是一个无条件跳转语句,可以向前或向后转移控制权。

goto关键字后面跟着一个标签。执行时,程序控制权将重定向到标签后面的语句。如果标签指向代码中任何更早的语句,则构成一个循环。另一方面,如果标签指向下一步,则相当于跳转。

goto 语句语法

goto 语句的语法为 -

goto label;

. . .

. . .

label: statement;

标签是任何有效的C 语言中的标识符。标签必须包含字母数字字符以及下划线 (_)。与任何标识符一样,同一个标签在程序中不能重复使用。标签后始终跟一个冒号 (:)。当 goto 将程序重定向到此处时,将执行冒号后的语句。

goto 语句流程图

以下流程图展示了 goto 语句的工作原理 -

goto 语句示例

示例 1

在下面的程序中,程序控制跳转到当前语句之后的给定标签。在打印程序结束信息之前,它会打印一个给定的数字。如果数字为"0",则跳转到printf 语句,显示该信息。

#include

int main (){

int n = 0;

if (n == 0)

goto end;

printf("The number is: %d", n);

end:

printf ("End of program");

return 0;

}

输出

运行代码并检查其输出 −

End of program

示例 2

这是一个检查给定数字是偶数还是奇数的程序。观察我们在这个程序中如何使用 goto 语句 -

#include

int main (){

int i = 11;

if (i % 2 == 0){

EVEN:

printf("The number is even

");

goto END;

}

else{

ODD:

printf("The number is odd

");

}

END:

printf("End of program");

return 0;

}

输出

由于给定的数字是 11,它将产生以下输出 -

The number is odd

End of program

更改数字并检查输出是否有所不同。

示例 3

如果 goto 无条件出现并向后跳转,则会创建无限循环。

#include

int main (){

START:

printf("Hello World

");

printf("How are you?

");

goto START;

return 0;

}

输出

运行代码并检查其输出 −

Hello World

How are you?

.......

.......

程序会持续打印两个字符串,直到被强制停止。

示例 4

在此程序中,我们有两个 goto 语句。第二个 goto 语句由于执行了向后跳转,因此形成了一个循环。另一个 goto 语句会在满足条件时跳出循环。

#include

int main(){

int i = 0;

START:

i++;

printf("i: %d

", i);

if (i == 5)

goto END;

goto START;

END:

printf("End of loop");

return 0;

}

输出

运行代码并检查其输出 −

i: 1

i: 2

i: 3

i: 4

i: 5

End of loop

示例 5

此处使用 goto 语句跳过循环变量中所有与其他变量匹配的值。结果,得到了 1、2 和 3 的所有唯一组合。

#include

int main (){

int i, j, k;

for(i = 1; i <= 3; i++){

for(j = 1; j <= 3; j++){

if (i == j)

goto label1;

for (k = 1; k <= 3; k++){

if (k == j || k == i)

goto label2;

printf("%d %d %d

", i,j,k);

label2: ;

}

label1: ;

}

}

return 0;

}

输出

运行代码并检查其输出 −

1 2 3

1 3 2

2 1 3

2 3 1

3 1 2

3 2 1

避免在 C 语言中使用 goto 语句

请注意,C 语言中的 goto 语句被认为是非结构化的,因为它允许程序跳转到代码中的任何位置,这会使代码难以理解、跟踪和维护。过多的 goto 语句会来回切换程序控制权,使程序逻辑难以理解。

著名计算机科学家 dsger Dijkstra 建议从所有编程语言中删除 goto 语句。他观察到,如果程序控制权在循环中间跳转,可能会产生不可预测的行为。goto 语句可用于创建具有多个入口和出口点的程序,这会使跟踪程序的控制流变得困难。

Dijkstra 强烈反对使用 goto 语句,这一观点影响深远,因为许多主流语言都不支持 goto 语句。但是,在某些语言中,例如 C 和 C++,它仍然可用。

一般来说,在 C 语言中最好避免使用 goto 语句。您可以有效地使用 if-else 语句、循环和循环控制、函数和子例程调用以及 try-catch-throw 语句。当且仅当这些替代方案无法满足您的算法需求时,才使用 goto。

c_loops.html

❮ C Continue 语句

C 语言函数 ❯