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

时间:2015-10-07 14:41:58

标签: fortran

正如标题所说,真的。

有什么反对不使用停止,像这样:

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

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

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

我看到很多旧的fortran代码在STOP声明之前有END PROGRAM,但是它真的需要吗?

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

1 个答案:

答案 0 :(得分:8)

代码

df %>% group_by(groupvar) %>%
    do( { 
        model = kmeans(cbind(.$v1, .$v2), centers = 5)
        data.frame(., fitted(model, methods = "centers"), cluster = model$cluster, row.names = NULL) 
    })
就现代Fortran中的程序返回值而言,

是多余的。如果支持退出代码,则没有整数或字符停止代码stop end program 应向操作系统返回0退出代码。如果遇到stop,则行为相同,向操作系统返回0。

程序输出出现差异。正如您所指出的那样,end program会产生输出。标准(Fortran 2008 cl.8.4)说

  

当图像被STOP或ERROR STOP语句终止时,其停止代码(如果有)可用   以处理器相关的方式。如果在该图像上发出任何异常(14)信号,则处理器应发出a   警告,指示哪些异常发出信号;此警告应在指定的单位上   常数错误单元(13.8.2.8)。建议通过格式化输出使停止代码可用   到同一个单位。

这建议停止代码在标准错误上可用,这是stop输出的来源。如果您已将停止代码提供给STOP,则会以stop输出。此外,如果存在浮点异常信令,您将获得详细说明该条件的标准错误的额外输出。

如果您不希望STOP的其他输出并且不使用它来向操作系统返回非零错误代码,则可以从程序中省略它。

主程序的stopstop结尾可能有历史原因,但我对FORTRAN66手册的简要略读并没有启发我。