总是用STOP语句结束FORTRAN程序是一种好的做法吗?
正如标题所说,真的 有没有什么反对不使用stop的,比如:总是用STOP语句结束FORTRAN程序是一种好的做法吗?,fortran,Fortran,正如标题所说,真的 有没有什么反对不使用stop的,比如: PROGRAM myprog . . < do stuff > . END PROGRAM myprog 程序myprog . . < 做事> . 结束程序myprog 而不是使用显式停止,如下所示: PROGRAM myprog . . < do stuff > . STOP END PROGRAM myprog 程序myprog . . < 做事> . 停止 结束程序myprog 我看到很多较
PROGRAM myprog
.
. < do stuff >
.
END PROGRAM myprog
程序myprog
.
. < 做事>
.
结束程序myprog
而不是使用显式停止,如下所示:
PROGRAM myprog
.
. < do stuff >
.
STOP
END PROGRAM myprog
程序myprog
.
. < 做事>
.
停止
结束程序myprog
我看到很多较旧的fortran代码在结束程序之前有一个停止
,但是那里真的需要它吗
在我们的Cray机器上,在程序末尾有一个STOP
stament将字符串“STOP”写入STDERR,这有点烦人…代码
stop
end program
在现代Fortran中,就程序返回值而言是冗余的。如果支持退出代码,则没有整数或字符停止代码的stop
应向操作系统返回0退出代码。如果遇到结束程序
,则行为相同,将0返回操作系统
差异出现在程序输出中。正如您所注意到的,stop
生成输出。该标准(Fortran 2008第8.4条)规定
当图像被STOP或ERROR STOP语句终止时,其停止代码(如果有)可用
以依赖于处理器的方式。如果任何异常(14)在该图像上发出信号,则处理器应发出
警告,指示哪些异常正在发送信号;该警告应出现在由指定制造商标识的装置上
恒定误差单位(13.8.2.8)。建议通过格式化输出提供停止代码
到同一个单位
这建议在标准错误上提供停止代码,这是您的stop
输出的来源。如果您给了stop
一个停止代码,那么它将被输出为stop
。此外,如果存在浮点异常信号,您将获得标准错误的额外输出,详细说明该条件
如果您不希望从stop
获得额外的输出,并且没有使用它向操作系统返回非零错误代码,则可以从程序中忽略它
主程序的停止
,结束
可能是有历史原因的,但我对FORTRAN66手册的简要浏览并没有启发我 简而言之,答案是否定的,没有理由(我认为)在结束程序之前立即停止以表示正常终止。在结束之前不需要停止。。您还可以检查编译器是否有关闭该功能的标志。也没有任何理由将RETURN放在每个子例程的末尾之前。Fortran 66没有指定end而不停止或返回的效果,因此它依赖于实现。我使用的某些预处理工具在结束前插入了一个停止,可能是为了帮助诊断这种古老的不可移植性。