goto 语句

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)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注