3 回答

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超5個(gè)贊
goto是無(wú)條件跳轉(zhuǎn),只能在goto語(yǔ)句出現(xiàn)處改變控制流,無(wú)法通過(guò)本身返回。要用goto返回,可以定義多個(gè)label,在不同位置配合不同label使用goto語(yǔ)句。
label在函數(shù)內(nèi)定義,作用域就是整個(gè)函數(shù),和其它名稱一樣無(wú)法改變。由于不是左值,它沒(méi)有生存期,僅在編譯期有意義。
----
everyone998 錯(cuò)誤。編譯器至少會(huì)對(duì)label標(biāo)識(shí)符進(jìn)行語(yǔ)義檢查。函數(shù)調(diào)用和goto是不同的。函數(shù)調(diào)用或返回時(shí),一般的實(shí)現(xiàn)中需要根據(jù)調(diào)用約定清理堆棧。調(diào)用時(shí)先保存現(xiàn)場(chǎng),復(fù)制實(shí)際參數(shù),然后才是跳轉(zhuǎn),并不是直接無(wú)條件跳轉(zhuǎn)那么簡(jiǎn)單。也因此goto語(yǔ)句無(wú)法跨函數(shù)跳轉(zhuǎn)。

TA貢獻(xiàn)1866條經(jīng)驗(yàn) 獲得超5個(gè)贊
goto就是強(qiáng)制跳轉(zhuǎn),不具有智能性,編譯器不會(huì)檢測(cè)錯(cuò)誤,for,while等語(yǔ)句實(shí)現(xiàn)的方法其實(shí)是在結(jié)束處使用一個(gè)if語(yǔ)句后goto到開(kāi)頭,而所謂的函數(shù)其實(shí)在調(diào)用函數(shù)和函數(shù)結(jié)尾處使用goto語(yǔ)句。C++里面如果在goto調(diào)用以及目標(biāo)語(yǔ)句間有新的定義并且使同級(jí)等情況的編譯器會(huì)報(bào)錯(cuò),否則編譯器不會(huì)管。
goto語(yǔ)句如果想結(jié)束的話可以仿照函數(shù)的寫法在返回的地方在加個(gè)goto語(yǔ)句。不過(guò)一般不要用,goto語(yǔ)句時(shí)用來(lái)跳出多重循環(huán)的,不然很容易錯(cuò)誤。

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超6個(gè)贊
goto其實(shí)是程序運(yùn)行完后,在return前,再執(zhí)行g(shù)oto語(yǔ)句的,給你個(gè)例子參考,你用F10但不單步調(diào)試下就知道了
int main()
{
int ap =0;
while(cin>>ap)
{
if (ap>0)
{
goto p1;
p1:
cout<<"greater than zero\n";
}
else
{
goto p2;
p2:
cout<<"less than zero\n";
}
}
return 0;
}
- 3 回答
- 0 關(guān)注
- 1065 瀏覽
添加回答
舉報(bào)