2013-09-28 35 views
-2

嗯,這是一個簡單的問題,可能有點顯而易見,但是,如果'if'具有錯誤條件,是由編譯器讀取,還是由編譯器直接跳過?當條件爲假時,會讀取(如果有)任何語言的條件?

謝謝! :)

+0

一個優化的編譯器可能會拋出它,因爲它是無法訪問的代碼。 – mak

+1

什麼樣的'如果'和什麼語言?例如,C和一些相關語言中的'#if false'會導致該「分支」甚至不被解析。 – harold

+0

在這種情況下,「讀」是什麼意思?即使「if」條件不成立,期望編譯器如何通過實際閱讀來了解它? – AnT

回答

1

在Java中,它在最終優化階段從字節代碼中刪除。因爲它減少了尺寸的運作。

3

如果條件靜態評估爲false,編譯器可能會優化它。

if (false) { 
    // The compiler may choose to drop this part from the compiled result 
} 

但是,這是編譯器特有的。在所有語言中不一樣,所有編譯器都不一樣。實際上,它可能取決於編譯器使用的優化設置。

5

編譯器總是讀取整個程序。如果符合「if」條件,許多優化編譯器會分析是否可以在編譯時評估條件值。如果它在編譯時已知,那麼編譯器可能會從生成的代碼中完全消除該條件。但是,如果在編譯時未知該條件的值,則編譯器將生成用於在運行時評估條件的代碼。

在運行時,通常使用條件跳轉指令跳轉到正確的代碼塊,具體取決於條件值。例如。如果結果爲假,CPU將直接「跳過」if體內的代碼。