3. goto 语句

goto 语句用于无条件跳转到同一函数内指定标签语句(Labeled statements)的位置开始执行。

语法

此语法用于跳转到指定标签处的语句。

goto 标识符标签;

标签语句的语法:

此语法会在语句处打一个标签,此标签会通过编译器编译为此语句的绝对位置。

标签: 语句

说明:

  1. 标签 必须是标识符。
  2. 标签定义可以是本函数内的任意位置,可以不遵守先定义后使用的规则,且标签只能是函数内有效。
  3. goto 语句不能跳转到函数之外。
  4. goto语句不得从具有可变修改类型标识符的作用域外部跳转至该标识符的作用域内部。

示例:

使用 goto 语句实现迭代语句的功能。

#include <stdio.h>

int main(int argc, char *argv[]) {
    int i = 0;

mylabel:
    printf("i: %d\n", i);
    i += 1;
    if (i < 5)
        goto mylabel;

    printf("程序结束\n");
    return 0;
}

注意:

goto语句不得从具有可变修改类型标识符的作用域外部跳转至该标识符的作用域内部。这可能会导致变量创建失败或没有初始化,是极其危险的行为。为了减少类似的错误发生,C 语言建议使用迭代语句和其它跳转语句组合使用来代替 goto 语句。尽可能少的使用 goto 语句可以避免很多难以控制的错误。

如,错误示例如下:

#include <stdio.h>

int main(int argc, char *argv[]) {
    int i = 0;

    goto myprint;
    int x = 200; // 错误,跳过了此变量的初始化。

myprint:
    printf("i: %d, x: %d\n", i, x);
    return 0;
}

练习: