是否可以使用变量中的错误代码/消息来停止或中止 Fortran 程序?似乎内在的不可能STOP
:
integer :: status = 1
character(len=3) :: err_msg = "err"
stop status
stop err_msg
这两个stop
调用都会在编译时引发语法错误。例如,我是否遗漏了什么,或者我必须stop 1
直接打电话?或者写我自己的包装?
除了要求 F2008-no-不在变量中。在 F2008 中,停止码必须是整数或字符常量表达式。变量不是常量——依赖于变量值的表达式不是常量表达式。
如果您将参数属性添加到的声明中status
,err_msg
那么它们将是 [named] 常量,并且可以用作停止或错误停止语句的常量表达式中的主要。
在 Fortran 2003 之前,停止代码可以是标量字符常量或最多 5 位的序列。scalar-char-constant表示其他人可能称之为字符串的内容,例如 your但"err"
不是 your err_msg
。
在 Fortran 2008 中,停止代码可以是返回scalar-default-char-constant-expr或scalar-int-constant-expr 的表达式。如果您有一个符合 Fortran 2008 的编译器,那么您可以使用一个参数(例如声明为的东西character(len=3), parameter :: err_msg = "err"
)作为停止代码
当然,2003 年和 2008 年标准中引入的功能的实现状态因编译器和版本而异。看起来您的编译器版本没有超出 Fortran 2003 标准。
您的操作系统对停止代码的作用是另一回事。
当前标准没有考虑停止代码中的变量。然而,正如高性能标志已经指出的那样,它们变得越来越灵活。
在即将发布的 Fortran 2015 标准(来自 2016/05/01 的工作文档,第 8.4 节)中,停止代码可以是scalar-default-char-expr或scalar-int-expr。因此,您的代码将与兼容的编译器一起使用。
Fortran 2015 的这一特性是在 GCC 版本 7 中添加的。