在C语言中,goto
语句允许程序无条件地跳转到同一函数内的标记位置。这个标记位置通过一个标签和冒号(:
)来标示。goto
语句可以用于从深层嵌套的循环或条件语句中直接跳出,或者跳过某些代码执行。尽管goto
语句在某些情况下可以使程序逻辑变得清晰,但过度使用会使程序难以理解和维护,因此在现代编程实践中,通常建议尽量避免使用goto
。
这里的label
是用户定义的标签名,它后面跟着一个冒号(:
)。goto label;
告诉程序跳转到带有此标签的位置执行代码。
goto label;
...
label: statement;
在这个例子中,当i
和j
都达到5时,程序会使用goto
语句跳到end
标签,从而跳出所有循环。
#include <stdio.h>
int main() {
int i = 0, j = 0;
for (i = 0; i < 10; i++) {
for (j = 0; j < 10; j++) {
if (i == 5 && j == 5) {
goto end;
}
// 其他循环代码
}
}
end:
printf("Jumped to end with i=%d and j=%d\n", i, j);
return 0;
}
在进行错误检查时,如果在函数的多个地方检测到错误,可以用goto
跳到函数末尾的错误处理代码。
在这个例子中,如果error
非零(表示有错误发生),程序会跳转到error_handler
标签执行错误处理代码。
#include <stdio.h>
int main() {
int error = 0;
// 一些代码
if (error) {
goto error_handler;
}
// 更多代码
if (error) {
goto error_handler;
}
goto end;
error_handler:
printf("An error occurred.\n");
end:
// 正常或错误处理后的代码
return 0;
}
goto
。goto
只能在同一函数内跳转。goto
造成的“意大利面条代码”(程序逻辑复杂,难以跟踪)。goto
可能会使代码难以遵循结构化编程原则。goto
可以是简化代码的有效手段。