goto
和标记语句 (C)
goto
语句将控制权转交给一个标签。 给定标签必须位于同一函数中,并且只可以出现在同一函数中的一个语句前面。
语法
statement
:
labeled-statement
jump-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 );
}
在此示例中,当 goto
等于 5 时,stop
语句将控制权转交给标记为 i
的点。