如題,比如我想用一個char變量保存標簽名,goto跳轉的標簽以變量代替。能否實現?如:char c='p';goto c; //c為'p’cout<<"+";p:return 0;
2 回答

至尊寶的傳說
TA貢獻1789條經驗 獲得超10個贊
goto是無條件跳轉,只能在goto語句出現處改變控制流,無法通過本身返回。要用goto返回,可以定義多個label,在不同位置配合不同label使用goto語句。
label在函數內定義,作用域就是整個函數,和其它名稱一樣無法改變。由于不是左值,它沒有生存期,僅在編譯期有意義。
everyone998 錯誤。編譯器至少會對label標識符進行語義檢查。函數調用和goto是不同的。函數調用或返回時,一般的實現中需要根據調用約定清理堆棧。調用時先保存現場,復制實際參數,然后才是跳轉,并不是直接無條件跳轉那么簡單。也因此goto語句無法跨函數跳轉。

慕村9548890
TA貢獻1884條經驗 獲得超4個贊
沒理解錯的話,題主指的是用變量存儲標簽以動態跳轉。
標簽地址了解一下,
void *label = &&p;
goto *label;
cout << "+";
p:
return 0;
- 2 回答
- 0 關注
- 566 瀏覽
添加回答
舉報
0/150
提交
取消