5

是否可以使用变量中的错误代码/消息来停止或中止 Fortran 程序?似乎内在的不可能STOP

integer :: status = 1
character(len=3) :: err_msg = "err"

stop status  
stop err_msg 

这两个stop调用都会在编译时引发语法错误。例如,我是否遗漏了什么,或者我必须stop 1直接打电话?或者写我自己的包装?

4

3 回答 3

6

除了要求 F2008-no-不在变量中。在 F2008 中,停止码必须是整数或字符常量表达式。变量不是常量——依赖于变量值的表达式不是常量表达式。

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

于 2013-07-03T14:08:21.883 回答
6

在 Fortran 2003 之前,停止代码可以是标量字符常量或最多 5 位的序列。scalar-char-constant表示其他人可能称之为字符串的内容,例如 your但"err"不是 your err_msg

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

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

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

于 2013-07-03T11:41:06.563 回答
2

当前标准没有考虑停止代码中的变量。然而,正如高性能标志已经指出的那样,它们变得越来越灵活。

在即将发布的 Fortran 2015 标准(来自 2016/05/01 的工作文档,第 8.4 节)中,停止代码可以是scalar-default-char-exprscalar-int-expr。因此,您的代码将与兼容的编译器一起使用。

Fortran 2015 的这一特性是在 GCC 版本 7 中添加的。

于 2017-10-07T16:52:16.660 回答