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