
来自cppreference.com
无条件地将控制权转移到所需位置. 当控制权无法通过约定的结构转移到所需位置时使用. goto语句导致无条件跳转(控制权的转换)到带有命名标签的语句(必须与goto语句出现在同一函数中),除非该跳转输入了可变长度数组或另一个修改后的变量范围(自C99起). The label是一个标识符,后跟一个冒号(:)和一条语句. 标签是唯一具有功能范围的标识符: 它们可以在它们出现的功能中的任何位置使用(在goto语句中). 任何语句之前可以有多个标签. 允许访问不可变修改对象的范围:

goto lab1; // OK :进入常规变量的作用域
int n = 5;
lab1:; // 注意未初始化 n ,如同以 int n; 声明
// goto lab2; // 错误:进入二个 VM 类型的作用域
double a[n]; // VLA
int (*p)[n]; // VM 指针
lab2:

如果goto离开了VLA的范围goto语句的语句表示,则VLA将被释放(如果再次执行初始化goto语句的语句表示,则可以重新分配):
{ int n = 1; label:; int a[n]; // 重分配 10 次,每次拥有不同的大小 if (n++ < 10) goto label; // 离开 VM 的作用域 }
转到

由于声明不是语句,因此声明前的标签必须使用空语句(冒号后的分号). 相同的规则适用于代码块结尾之前的标签.
C ++对goto语句施加了其他限制,但允许在标签成为C ++语句之前声明标签.
运行此代码
#include <stdio.h> int main(void) { // goto 可用于简单地离开多层循环 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:; }
输出:
(0;0) (0;1) (0;2) (1;0) (1;1) (1;2)
来自“; oldid = 51924”
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-157533-1.html
美国的这种行为
你如果在伊拉克对美国说“关你鸟事”