2014-12-07 62 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