2014-12-07 89 views
2

我經常看到有人在使用OPEN語句時沒有明確指定STATUS。在Fortran 90和2008標準中,關於STATUS的說法如下:打開時「未知」的默認狀態

如果指定UNKNOWN,則狀態與處理器有關。如果省略此說明符,則默認值爲UNKNOWN。

我將其解釋爲,如果STATUS被省略,任何事情都可能發生,具體取決於您使用的機器。

然而,通過一些測試,似乎默認行爲(當STATUS被省略),是REPLACE。但我無法在gfortran編譯器手冊(從https://gcc.gnu.org/onlinedocs/)中找到這種行爲。

問題:REPLACE這個確實是gfortran和ifort等流行編譯器的默認行爲嗎?如果是這樣,這實際上是記錄(但我只是碰巧找不到它)?

+1

未記錄的行爲很少意味着隨機。 – 2014-12-07 08:27:23

+1

'OPEN'語句中的推薦說明符是'file','access','status'和'action'。 – 2015-09-21 13:09:02

回答

3

在通用編譯器中,UNKNOWN在所有這些編譯器中的表現非常相似。但它絕對不等於REPLACE!該選擇會覆蓋您想要閱讀的數據!

的IBM XL Fortran的手動指定此:

UNKNOWN,連接現有的文件,或創建並連接一個新 文件。如果文件存在,它將連接爲OLD。如果文件不存在 ,則它作爲NEW連接。

+0

謝謝 - 我以爲是'REPLACE',因爲我只使用打開的文件進行輸出。 – boxofchalk1 2014-12-07 23:10:54

+1

闡述了一下。 'open(.. status ='replace')'立即在'open'語句中清除現有文件,無論您是否寫入它。 'old'或'unknown'僅在第一個'write'上覆蓋現有文件。我現在對於「未知」還有什麼其他行爲感到困惑,爲什麼不規範近乎普遍的行爲。 – agentp 2014-12-08 15:07:43