2 回答

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

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