2 回答

TA貢獻(xiàn)1789條經(jīng)驗(yàn) 獲得超10個(gè)贊
goto是無條件跳轉(zhuǎn),只能在goto語(yǔ)句出現(xiàn)處改變控制流,無法通過本身返回。要用goto返回,可以定義多個(gè)label,在不同位置配合不同label使用goto語(yǔ)句。
label在函數(shù)內(nèi)定義,作用域就是整個(gè)函數(shù),和其它名稱一樣無法改變。由于不是左值,它沒有生存期,僅在編譯期有意義。
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),并不是直接無條件跳轉(zhuǎn)那么簡(jiǎn)單。也因此goto語(yǔ)句無法跨函數(shù)跳轉(zhuǎn)。

TA貢獻(xiàn)1884條經(jīng)驗(yàn) 獲得超4個(gè)贊
沒理解錯(cuò)的話,題主指的是用變量存儲(chǔ)標(biāo)簽以動(dòng)態(tài)跳轉(zhuǎn)。
標(biāo)簽地址了解一下,
void *label = &&p;
goto *label;
cout << "+";
p:
return 0;
- 2 回答
- 0 關(guān)注
- 563 瀏覽
添加回答
舉報(bào)