2015-10-07 63 views
4

正如標題所說,真的。是否總是使用STOP語句結束FORTRAN程序?

何樂而不爲不使用停止,這樣的事:

PROGRAM myprog 
. 
. < do stuff > 
. 
END PROGRAM myprog 

,而不是使用一個明確的停止,因爲在此:

PROGRAM myprog 
. 
. < do stuff > 
. 
STOP 
END PROGRAM myprog 

我看到很多舊的Fortran代碼有在END PROGRAM陳述之前有STOP,但這真的需要嗎?

在我們的Cray機器,其在節目的最後一個STOP stament寫入字符串「STOP」到STDERR,這是一個有點討厭...

+0

簡短的答案是否定的,沒有理由(我認爲)在「結束程序」之前立即停止指示正常終止。 – Ross

+0

在結束之前不需要'STOP'。仍然可以檢查編譯器是否有標誌來關閉它。 – agentp

+0

也沒有任何理由在每個子程序結束之前放置RETURN。 –

回答

7

代碼

stop 
end program 

是就現代Fortran中的程序返回值而言,這是多餘的。 A stop沒有整數或字符停止代碼應該返回一個0退出代碼到操作系統,如果支持退出代碼。如果遇到end program,則行爲相同,將0返回給操作系統。

程序輸出中出現差異。如您所知,stop會產生輸出。標準(2008年的Fortran CL。8.4)表示

當圖像由STOP或ERROR STOP語句終止,其停止的代碼,如果有的話,在處理器依賴性方式提供 。如果任何異常(14)在該圖像上發出信號,處理器應發出一個 警告,指出哪些異常是信令;該警告應在由名爲 恆定錯誤單元(13.8.2.8)標識的單元上。建議通過格式化輸出 將停止代碼提供給同一個設備。

此建議停止代碼可以提供標準的錯誤,這是你的STOP輸出的來源。如果您提供了停止代碼stop,則它將與STOP一起輸出。此外,如果存在浮點異常信號,您將獲得標準錯誤附加輸出,詳細說明該條件。

如果您不希望從stop獲得附加輸出,並且沒有使用它來向操作系統返回非零錯誤代碼,則可以從程序中省略它。

主程序的stop,end結尾可能有歷史原因,但是我簡要介紹了FORTRAN66手冊並沒有啓發我。

+0

Fortran 66沒有具體說明END沒有STOP或RETURN的效果,所以它是依賴於實現的。我使用的某些預處理工具在END之前插入了STOP,可能是因爲它可能有助於診斷這種古老的不可移植性。 – tim18