Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
总是用STOP语句结束FORTRAN程序是一种好的做法吗?_Fortran - Fatal编程技术网

总是用STOP语句结束FORTRAN程序是一种好的做法吗?

总是用STOP语句结束FORTRAN程序是一种好的做法吗?,fortran,Fortran,正如标题所说,真的 有没有什么反对不使用stop的,比如: PROGRAM myprog . . < do stuff > . END PROGRAM myprog 程序myprog . . < 做事> . 结束程序myprog 而不是使用显式停止,如下所示: PROGRAM myprog . . < do stuff > . STOP END PROGRAM myprog 程序myprog . . < 做事> . 停止 结束程序myprog 我看到很多较

正如标题所说,真的

有没有什么反对不使用stop的,比如:

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而不停止或返回的效果,因此它依赖于实现。我使用的某些预处理工具在结束前插入了一个停止,可能是为了帮助诊断这种古老的不可移植性。