?
This document uses PHP Chinese website manual Release
無條件地將控制權轉(zhuǎn)移到所需位置。
否則無法使用傳統(tǒng)構造將控制權轉(zhuǎn)移到所需位置時使用。
goto label ; | ||
---|---|---|
label : statement |
該goto
語句導致無條件跳轉(zhuǎn)(控制權轉(zhuǎn)移)到由指定標簽(必須出現(xiàn)在與 goto 語句相同的函數(shù)中)前面的語句中,除非該跳轉(zhuǎn)將進入可變長度數(shù)組的范圍或另一變量修改類型。(自 C99以來)。
標簽是一個標識符,后跟一個冒號(:)和一個語句。標簽是唯一具有函數(shù)作用域的標識符:可以在它們出現(xiàn)的相同函數(shù)中的任何位置使用它們(在 goto 語句中)。任何陳述之前可能有多個標簽。
輸入非變化修改變量的范圍是允許的:goto lab1; // OK:進入常規(guī)變量的范圍int n = 5; lab1中的:; //注意,n是未初始化的,就像由int n聲明的那樣; // goto lab2; //錯誤:進入兩個VM類型的范圍double an; //一個VLA int(* p)n; //虛擬機指針lab2:如果goto離開了VLA的范圍,它將被釋放(并且如果它的初始化被再次執(zhí)行,可以被重新分配):{int n = 1; 標簽:; int an; //重新分配10次,每個都有不同的大小if(n ++ <10)goto label; //留下VM的范圍} | (自C99以來) |
---|
goto
.
由于聲明不是語句,聲明之前的標簽必須使用空語句(緊跟在冒號后面的分號)。同樣適用于塊結束之前的標簽。
C ++對goto
語句施加了額外的限制,但在聲明之前允許標簽(這是C ++中的語句)。
#include <stdio.h> int main(void){ // goto can be used to leave a multi-level loop easily 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)
C11 standard (ISO/IEC 9899:2011):
6.8.6.1 The goto statement (p: 152-153)
C99 standard (ISO/IEC 9899:1999):
6.8.6.1 The goto statement (p: 137-138)
C89/C90 standard (ISO/IEC 9899:1990):
3.6.6.1 The goto statement