C++ goto 語(yǔ)句
C++ goto 語(yǔ)句
goto 語(yǔ)句允許把控制無條件轉(zhuǎn)移到同一函數(shù)內(nèi)的被標(biāo)記的語(yǔ)句。
注意:在任何編程語(yǔ)言中,都不建議使用 goto 語(yǔ)句。因?yàn)樗沟贸绦虻目刂屏麟y以跟蹤,使程序難以理解和難以修改。任何使用 goto 語(yǔ)句的程序可以改寫成不需要使用 goto 語(yǔ)句的寫法。
1. 語(yǔ)法
C++ 中 goto 語(yǔ)句的語(yǔ)法:
goto label; .. label: statement;
在這里,label 是識(shí)別被標(biāo)記語(yǔ)句的標(biāo)識(shí)符,可以是任何除 C++ 關(guān)鍵字以外的純文本。標(biāo)記語(yǔ)句可以是任何語(yǔ)句,放置在標(biāo)識(shí)符和冒號(hào)(:)后邊。
2. 流程圖
3. 實(shí)例
#include <iostream> using namespace std; int main () { // 局部變量聲明 int a = 10; // do 循環(huán)執(zhí)行 LOOP:do { if( a == 15) { // 跳過迭代 a = a + 1; goto LOOP; } cout << "a 的值:" << a << endl; a = a + 1; }while( a < 20 ); return 0; }
當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)果:
a 的值: 10 a 的值: 11 a 的值: 12 a 的值: 13 a 的值: 14 a 的值: 16 a 的值: 17 a 的值: 18 a 的值: 19
goto 語(yǔ)句一個(gè)很好的作用是退出深嵌套例程。例如,請(qǐng)看下面的代碼片段:
for(...) { for(...) { while(...) { if(...) goto stop; . . . } } } stop: cout << "Error in program.\n";
消除 goto 會(huì)導(dǎo)致一些額外的測(cè)試被執(zhí)行。一個(gè)簡(jiǎn)單的 break 語(yǔ)句在這里不會(huì)起到作用,因?yàn)樗粫?huì)使程序退出最內(nèi)層循環(huán)。
相關(guān)文章
- C++ 結(jié)構(gòu) struct
- C++ 重載運(yùn)算符和重載函數(shù)
- C語(yǔ)言 程序結(jié)構(gòu)
- C語(yǔ)言 指針
- C語(yǔ)言 標(biāo)準(zhǔn)庫(kù) <math.h>
- C語(yǔ)言 標(biāo)準(zhǔn)庫(kù) <stdlib.h>
- C# 類 Class
- C# do…while 循環(huán)
- C語(yǔ)言 庫(kù)函數(shù) fread()
- C語(yǔ)言 庫(kù)函數(shù) ldiv()
- C語(yǔ)言 庫(kù)函數(shù) atan2()
- C語(yǔ)言 庫(kù)函數(shù) ldexp()
- C語(yǔ)言 庫(kù)函數(shù) pow()
- C語(yǔ)言 庫(kù)函數(shù) fmod()
- C語(yǔ)言 庫(kù)函數(shù) longjmp()
- C語(yǔ)言 庫(kù)函數(shù) raise()
- C語(yǔ)言 庫(kù)函數(shù) memmove()
- C語(yǔ)言 庫(kù)函數(shù) strerror()
- C語(yǔ)言 break 語(yǔ)句
- C語(yǔ)言 continue 語(yǔ)句