2012-08-12 42 views
-3

是否可以在內聯函數中使用goto語句?
考慮這個例子:內聯函數中的goto語句?

main() 
{ 
. 
. 
. 
label: 
. 
. 
. 
function1(); 
. 
. 
. 
. 
} 
void function1() 
{ 
. 
. 
. 
goto label; 
. 
. 
. 
} 

但這裏的問題是,我認爲,如果編譯器會忽略使得功能爲內聯,這可有時會發生,我們會得到一個運行時錯誤。我對麼?有人能幫我解決這個問題嗎?

+0

假設這是C或C++或相關語言,那麼您只能在函數中使用goto。如果您嘗試編譯上面的示例,則會從編譯器獲得適當的錯誤消息。 – 2012-08-12 16:19:03

+0

@PaulR謝謝。, – user221287 2012-08-12 16:20:27

回答

2

假設你意指C或C++,inline(如果你的意思是C++類的身體內的定義)是一個暗示,編譯器應該實施以特定方式的功能。

除了編譯器可能忽略這個*的事實外,它不會改變函數的實際語義。這確實是重點,它表示「將它視爲一種以源代碼的方式進行函數調用,而不是作爲編譯代碼中的獨立函數」。

所以任何故障C/C++的語法規則(如荷蘭國際集團goto在其他範圍的標籤),是不允許的。

也考慮一下。如果在另一個功能中存在相同的標籤,應該使用哪個範圍?一般來說,編譯器沒有辦法決定要做什麼,這是你不允許編譯器去做的事情。

*相反,編譯器可能也沒有關鍵字,或內聯幾個電話,而不是其他人相同的功能,該關鍵字是否存在與否的內聯函數調用。