2013-04-25 39 views
10

有人可以告訴我,如果在同一個C文件的不同功能中使用相同的goto標籤是否可以接受?在C文件中使用相同的goto標籤,但功能不同

爲了解釋我面對什麼:

function1() 
{ 
    ... 

    goto label 

    ... 

label: 
    ... 
} 

function2() 
{ 
    ... 

    goto label; 

    ... 

label: 
    ... 
} 

現在發生了什麼是標籤之後的代碼被用於malloc分配「的數據清理。整個事情在function2中崩潰。我打印出了內存。自由和相同的地點被釋放多次。這是因爲所有的gotos?這是對goto語句的有效使用嗎?

+1

請正確設置您的問題。 – Alex 2013-04-25 07:34:36

+0

嘗試發佈一些代碼以獲取實際問題... – akp 2013-04-25 07:36:10

+0

您可以在不同的功能中使用相同的標籤名稱,但不能使用另一個功能中的*標籤。您的崩潰與重新使用的標籤名稱無關。你的代碼有其他錯誤,導致雙重空閒。 – 2013-04-25 07:38:58

回答

15

標籤是本地的,所以您可以在多個功能中使用相同的標籤。

關於是否應該使用goto的問題是一個不同的問題,但一個不容易回答的問題。總之,不要使用goto。但與所有內容一樣(特別是在編程方面),有一些例外,goto可能有用。

+8

使用goto進行清理往往是其中之一。 – Medinoc 2013-04-25 08:19:16

+1

當構建/拆卸很複雜(例如:linux內核)時,goto被非常頻繁地使用,並且各種退出條件會重用其他代碼(例如:分配/釋放資源)。在這些情況下,使用goto更清晰,並確保貫穿機制將在各個拆除階段執行完全相同的序列。 – 2017-05-22 17:36:16

5

約阿希姆在這裏說,標籤是本地的;但請注意,標籤對於功能而言是本地的 - 而不是當前的塊。 goto語句不考慮作用域,除了全功能作用域。

相關問題