我在我們的fortran代碼的自定義預處理器的環境中工作。我使用預處理器將邏輯參數切換爲一種窮人的函數指針。今天我意識到,我有一個類似的情況:gfortran編譯器錯誤?
program main
logical,parameter :: untrue=.false.
if(untrue)then
call func1()
else
call func2()
endif
end
subroutine func2()
print*,"Hello, World!"
end
換句話說,func1
不被任何定義,但是,這個編譯與gfortran(版本4.4和4.6),因爲據推測,編譯器優化了通話了。我目前沒有其他編譯器需要檢查,這些代碼是否可以在其他地方編譯?可以/應該這被認爲是一個編譯器錯誤?
因爲我切換邏輯開關(而不是包含/不包含代碼),部分原因是編譯器仍然可以檢查該代碼塊中的接口/語法(如果有能力的話)(並針對事件發出適當的警告不是簡單的函數調用)。這是否意味着這些測試沒有被執行或者鏈接器不需要該功能,因此一切都會通過Ok?
謝謝。在這一點上,我不能依賴標準的新版本。代碼是在15年前編寫的,並且預處理器是這樣的,許多f90構造甚至可能導致它斷裂:-(我也知道需要一個接口的程序檢查 - 但是,我們的pre -processor。我想,既然標準甚至沒有解決死代碼的問題,什麼都行......謝謝(我會等一會兒,只是爲了確保沒有其他人有任何關於此的說法,如果他們不要,我會很樂意接受這一點+1對於一個很好的答案任何方式。) – mgilson 2012-07-13 03:43:52