始终以STOP语句结束FORTRAN程序是一种好习惯吗?

ccb*_*ney 5 fortran

正如标题所说,真的.

是否有任何反对不使用停止,像这样:

PROGRAM myprog
. 
. < do stuff >
.
END PROGRAM myprog
Run Code Online (Sandbox Code Playgroud)

而不是使用显式停止,如下所示:

PROGRAM myprog
. 
. < do stuff >
.
STOP
END PROGRAM myprog
Run Code Online (Sandbox Code Playgroud)

我看到很多旧版的fortran代码都有一个STOP之前的版本END PROGRAM,但它真的需要吗?

在我们的Cray机器上,STOP在程序结束时有一个stament将字符串"STOP"写入STDERR,这有点烦人......

cas*_*sey 8

代码

stop
end program
Run Code Online (Sandbox Code Playgroud)

就现代Fortran中的程序返回值而言,这是多余的.一个stop没有整数或字符停止代码应该返回一个0退出代码的操作系统,如果退出代码的支持.如果end program遇到行为相同,则返回0到OS.

程序输出出现差异.如你所知,stop产生输出.标准(Fortran 2008 cl.8.4)说

当图像被STOP或ERROR STOP语句终止时,其停止代码(如果有)以依赖于处理器的方式提供.如果在该图像上发出任何异常(14)信号,则处理器应发出警告,指示哪些异常发出信号; 该警告应在由指定的恒定误差单元(13.8.2.8)确定的单元上.建议通过格式化输出将停止代码提供给同一单元.

这建议在标准错误上提供停止代码,这是STOP输出的来源.如果你给了一个停止的代码stop,它会一直与输出STOP.此外,如果存在浮点异常信令,您将获得详细说明该条件的标准错误的额外输出.

如果您不希望从stop操作系统中获取额外输出并且不使用它来向操作系统返回非零错误代码,则可以从程序中省略它.

有可能是为有历史原因的stop,end主要程序的结束,但我的一个FORTRAN66手册简要略读没有赐教.