2015-10-07 35 views
4

正如标题所说,真的。是否总是使用STOP语句结束FORTRAN程序?

何乐而不为不使用停止,这样的事:

PROGRAM myprog 
. 
. < do stuff > 
. 
END PROGRAM myprog 

,而不是使用一个明确的停止,因为在此:

PROGRAM myprog 
. 
. < do stuff > 
. 
STOP 
END PROGRAM myprog 

我看到很多旧的Fortran代码有在END PROGRAM陈述之前有STOP,但这真的需要吗?

在我们的Cray机器,其在节目的最后一个STOP stament写入字符串“STOP”到STDERR,这是一个有点讨厌...

+0

简短的答案是否定的,没有理由(我认为)在“结束程序”之前立即停止指示正常终止。 – Ross

+0

在结束之前不需要'STOP'。仍然可以检查编译器是否有标志来关闭它。 – agentp

+0

也没有任何理由在每个子程序结束之前放置RETURN。 –

回答

7

代码

stop 
end program 

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

程序输出中出现差异。如您所知,stop会产生输出。标准(2008年的Fortran CL。8.4)表示

当图像由STOP或ERROR STOP语句终止,其停止的代码,如果有的话,在处理器依赖性方式提供 。如果任何异常(14)在该图像上发出信号,处理器应发出一个 警告,指出哪些异常是信令;该警告应在由名为 恒定错误单元(13.8.2.8)标识的单元上。建议通过格式化输出 将停止代码提供给同一个设备。

此建议停止代码可以提供标准的错误,这是你的STOP输出的来源。如果您提供了停止代码stop,则它将与STOP一起输出。此外,如果存在浮点异常信号,您将获得标准错误附加输出,详细说明该条件。

如果您不希望从stop获得附加输出,并且没有使用它来向操作系统返回非零错误代码,则可以从程序中省略它。

主程序的stop,end结尾可能有历史原因,但是我简要介绍了FORTRAN66手册并没有启发我。

+0

Fortran 66没有具体说明END没有STOP或RETURN的效果,所以它是依赖于实现的。我使用的某些预处理工具在END之前插入了STOP,可能是因为它可能有助于诊断这种古老的不可移植性。 – tim18