是否可以使用变量中的错误代码/消息来停止或中止fortran程序?内部STOP
:
integer :: status = 1
character(len=3) :: err_msg = "err"
stop status
stop err_msg
两个stop
调用都会在编译时抛出语法错误。我错过了什么,或者我是否必须直接拨打stop 1
?或者写我自己的包装器?
答案 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中,停止代码必须是整数或字符常量表达式。变量不是常量 - 依赖于变量值的表达式不是常量表达式。
如果您将参数属性添加到status
和err_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。