停止变量中的代码?

时间:2013-07-03 11:18:36

标签: fortran gfortran

是否可以使用变量中的错误代码/消息来停止或中止fortran程序?内部STOP

似乎无法实现
integer :: status = 1
character(len=3) :: err_msg = "err"

stop status  
stop err_msg 

两个stop调用都会在编译时抛出语法错误。我错过了什么,或者我是否必须直接拨打stop 1?或者写我自己的包装器?

3 个答案:

答案 0 :(得分:6)

直到Fortran 2003,停止代码可以是标量字符常量或最多5位数的序列。 标量 - 字符常量表示其他人可能称之为字符串的内容,例如您的"err"而不是err_msg

在Fortran 2008中,停止代码可以是一个表达式,它返回 scalar-default-char-constant-expr 标量-int-constant-expr 。如果您有符合Fortran 2008标准的编译器,那么您可以使用参数(例如声明为character(len=3), parameter :: err_msg = "err"的东西)作为停止代码

当然,2003和2008标准中引入的功能的实现状态因编译器和编译器以及版本而异。看起来您的编译器版本不会超出Fortran 2003标准。

您的操作系统使用停止代码执行的操作是另一回事。

答案 1 :(得分:6)

超出要求F2008 - 否 - 不在变量中。在F2008中,停止代码必须是整数或字符常量表达式。变量不是常量 - 依赖于变量值的表达式不是常量表达式。

如果您将参数属性添加到statuserr_msg的声明中,那么它们将[命名]常量,并且可以在常量表达式中用作停止或错误停止的主要参数言。

答案 2 :(得分:2)

现行标准不允许停止代码中的变量。然而,正如高性能标志所说,它们已变得越来越灵活。

在即将发布的Fortran 2015标准(working document from 2016/05/01,第8.4节)中,停止代码可以是 scalar-default-char-expr scalar-int-expr 。因此,您的代码将使用兼容的编译器。

Fortran 2015的这个功能在GCC的第7版中是added