goto 语句将控制权转交给一个标签。 给定标签必须位于同一函数中,并且只可以出现在同一函数中的一个语句前面。
语法
statement:
labeled-statementjump-statement
jump-statement:
goto identifier ;labeled-statement:
identifier : statement
语句标签仅对 goto 语句有意义;在任何其他上下文中,在不考虑标签的情况下执行已标记的语句。
jump-statement 必须位于同一函数中,并且只能出现在同一函数中的一个语句前面。 跟在 goto 后的 identifier 名称集具有自己的命名空间,因此这些名称不影响其他标识符。 不能重新声明标签。 有关详细信息,请参阅命名空间。
尽可能优先使用 break、continue 和 return 语句而不是 goto 是一种好的编程风格。 由于 break 语句只从一层循环中退出,因此从深度嵌套的循环中退出循环可能需要使用 goto。
此示例演示了 goto 语句:
// goto.c
#include <stdio.h>
int main()
{
int i, j;
for ( i = 0; i < 10; i++ )
{
printf_s( "Outer loop executing. i = %d\n", i );
for ( j = 0; j < 3; j++ )
{
printf_s( " Inner loop executing. j = %d\n", j );
if ( i == 5 )
goto stop;
}
}
/* This message does not print: */
printf_s( "Loop exited. i = %d\n", i );
stop: printf_s( "Jumped to stop. i = %d\n", i );
}
在此示例中,当 i 等于 5 时,goto 语句将控制权转交给标记为 stop 的点。