goto 语句是 C 语言中一个无条件跳转控制语句,执行到 goto 时,程序流会立即转移到同一函数内由语句标签标记的位置,不做任何条件检查。
1. 语法格式
goto 标签名; /* 跳转指令 */
...
标签名: /* 标签定义,后跟冒号 */
语句;Code language: PHP (php)
标签命名规则:与变量名相同,由字母、数字、下划线组成,首字符必须是字母或下划线。
2. 基础示例
#include <stdio.h>
int main(void)
{
printf("1\n");
printf("2\n");
if(0)
goto bamn; /* 条件为假,不会跳转 */
printf("3\n");
printf("4\n");
printf("5\n");
printf("6\n");
bamn: /* 标签 */
printf("7\n");
return 0;
}Code language: PHP (php)
运行输出:
1
2
3
4
5
6
7
若将 if(0) 改为 if(1),则输出:
1
2
7
3. 典型用途
| 场景 | 说明 | 示例 |
|---|---|---|
| 多层循环跳出 | 从深层嵌套循环中一次性跳出到函数末尾 | goto cleanup; |
| 错误处理/资源清理 | 函数中多处出错时统一释放内存、关闭文件 | goto error_handler; |
| 状态机跳转 | 根据状态值跳转到不同处理段 | goto state_2; |
错误处理示例(Linux 内核风格):
int func(void)
{
char *buf1 = malloc(100);
if (!buf1) goto err1;
char *buf2 = malloc(200);
if (!buf2) goto err2;
/* 正常逻辑 */
return 0;
err2:
free(buf1);
err1:
return -1;
}Code language: PHP (php)
Previous: 练习:使用 switch 判断 Y/N 确认输入
Next: 按位运算符