首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

goto statement

无条件地将控制权转移到所需位置。

否则无法使用传统构造将控制权转移到所需位置时使用。

句法

goto label ;

?

?

label : statement

?

?

说明

goto语句导致无条件跳转(控制权转移)到由指定标签(必须出现在与 goto 语句相同的函数中)前面的语句中,除非该跳转将进入可变长度数组的范围或另一变量修改类型。(自 C99以来)。

标签是一个标识符,后跟一个冒号(:)和一个语句。标签是唯一具有函数作用域的标识符:可以在它们出现的相同函数中的任何位置使用它们(在 goto 语句中)。任何陈述之前可能有多个标签。

输入非变化修改变量的范围是允许的:goto lab1; // OK:进入常规变量的范围int n = 5; lab1中的:; //注意,n是未初始化的,就像由int n声明的那样; // goto lab2; //错误:进入两个VM类型的范围double an; //一个VLA int(* p)n; //虚拟机指针lab2:如果goto离开了VLA的范围,它将被释放(并且如果它的初始化被再次执行,可以被重新分配):{int n = 1; 标签:; int an; //重新分配10次,每个都有不同的大小if(n ++ <10)goto label; //留下VM的范围}

(自C99以来)

关键词

goto.

笔记

由于声明不是语句,声明之前的标签必须使用空语句(紧跟在冒号后面的分号)。同样适用于块结束之前的标签。

C ++对goto语句施加了额外的限制,但在声明之前允许标签(这是C ++中的语句)。

代码语言:javascript
复制
#include <stdio.h>
 
int main(void)
{
    // goto can be used to leave a multi-level loop easily
    for (int x = 0; x < 3; x++) {
        for (int y = 0; y < 3; y++) {
            printf("(%d;%d)\n",x,y);
            if (x + y >= 3) goto endloop;
        }
    }
endloop:;
}

输出:

代码语言:javascript
复制
(0;0)
(0;1)
(0;2)
(1;0)
(1;1)
(1;2)

参考

  • C11 standard (ISO/IEC 9899:2011):
    • 6.8.6.1 The goto statement (p: 152-153)
  • C99 standard (ISO/IEC 9899:1999):
    • 6.8.6.1 The goto statement (p: 137-138)
  • C89/C90 standard (ISO/IEC 9899:1990):
    • 3.6.6.1 The goto statement

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com