goto 语句

goto 语句使程序无条件地将控制权转移到与 goto 语句上指定的标签相关联的语句。

goto 语句语法

读取语法图跳过可视语法图goto标签标识;

由于 goto 语句会干扰正常的处理顺序,因此使程序更难以读取和维护。 通常, break 语句, continue 语句或函数调用可以消除对 goto 语句的需求。

如果使用 goto 语句退出活动块,那么当从该块传输控制权时,将销毁任何局部变量。

不能使用 goto 语句来跳过初始化。

允许 goto 语句在可变长度数组的作用域内跳转,但不超过具有可变修改类型的对象的任何声明。

以下示例显示了用于跳出嵌套循环的 goto 语句。 可以在不使用 goto 语句的情况下编写此函数。

/**
 ** This example shows a goto statement that is used to
 ** jump out of a nested loop.
 **/

#include <stdio.h>
void display(int matrix[3][3]);

int main(void)
{
   int matrix[3][3]=    {1,2,3,4,5,2,8,9,10};
   display(matrix);
   return(0);
}

void display(int matrix[3][3])
{
   int i, j;

   for (i = 0; i < 3; i++)
      for (j = 0; j < 3; j++)
      {
         if ( (matrix[i][j] < 1) || (matrix[i][j] > 6) )
            goto out_of_bounds;
         printf("matrix[%d][%d] = %d\n", i, j, matrix[i][j]);
      }
   return;
   out_of_bounds: printf("number must be 1 through 6\n");
}

计算的 goto 语句 (IBM 扩展)

计算的 gotogoto 语句,其目标是来自相同函数的标签。 标签的地址是类型为 void*的常量,可通过将一元标签值运算符 && 应用于标签来获取。 计算的 goto 的目标在运行时已知,来自相同函数的所有计算的 goto 语句都将具有相同的目标。 语言功能是 C99 和 C++的扩展,实现此功能是为了便于移植使用 GNU C 开发的程序。

计算的 goto 语句语法

读取语法图跳过可视语法图goto* 表达式 ;
* expression 是类型为 void*的表达式。