2016-08-02 30 views
3

我想知道,下面的代碼:C中的「goto」行爲:符號如何處理?

{ 
    int i = 42; 
    goto end; 
} 
end: 

什麼是符號的狀態,當我們到達末:(我們會看到在調試器)?即使我們超出了範圍,它是否仍然存在?是否存在標準行爲還是依賴於編譯器?

爲了舉例,我們假設代碼是使用帶有調試符號的gcc編譯的。

輔助地,C++中的行爲是否相同?

謝謝。

+3

什麼阻止你執行此代碼?你甚至可以用不同的優化標誌或不同的gcc版本來編譯它。 – aisbaa

+6

如果你留有作用域 - 所有本地作業都被銷燬。它的範圍是以什麼方式留下並不重要。 – Sergio

+0

@aisbaa執行此代碼如何幫助回答問題? – CompuChip

回答

7

在塊中聲明的變量只會在該塊中「存活」(不管你是否使用goto都沒關係)。

這種行爲在C++中是一樣的

+0

所以我假設在C++中,RAII會被應用,驅逐艦會被調用,對吧? – Vultrao

+1

是的,但基本類型除外 –

3

狀態是......不可見(超出範圍)。