Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Stop code in variable?

Is it possible to stop or abort a fortran program with an error code/message in a variable? It seems it's not possible with the intrinsic STOP:

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

stop status  
stop err_msg 

Both stop calls throw syntax errors on compilation. Am I missing something, or do I have to call stop 1 directly, for example? Or write my own wrapper?

like image 980
Yossarian Avatar asked Jul 03 '13 11:07

Yossarian


3 Answers

Up to Fortran 2003 the stop code can be either a scalar-char-constant or a sequence of up to 5 digits. A scalar-char-constant means what others might call a string, eg your "err" but not your err_msg.

In Fortran 2008 the stop code can be an expression which returns either a scalar-default-char-constant-expr or a scalar-int-constant-expr. If you had a Fortran 2008 compliant compiler then you could use a parameter (eg something declared as character(len=3), parameter :: err_msg = "err") as a stop code

Of course, the state of implementation of features introduced in the 2003 and 2008 standards varies from compiler to compiler and version to version. It looks as if your compiler version doesn't go beyond the Fortran 2003 standard.

And what your operating system does with the stop code is another matter.

like image 60
High Performance Mark Avatar answered Oct 24 '22 05:10

High Performance Mark


Beyond requiring F2008 - no - not in a variable. In F2008 the stop code must be an integer or character constant expression. Variables are not constants - an expression that relies on the value of a variable is not a constant expression.

If you added the parameter attribute to the declarations of status and err_msg then they would be [named] constants, and could be used as a primary in the constant expression for a stop or error stop statement.

like image 27
IanH Avatar answered Oct 24 '22 06:10

IanH


The current standards make no allowances for variables in stop codes. However, they have become more and more flexible as High Performance Mark already stated.

In the upcoming Fortran 2015 standard (working document from 2016/05/01, section 8.4) the stop code can be either a scalar-default-char-expr or a scalar-int-expr. So your code will work with a compliant compiler.

This feature of Fortran 2015 was added in version 7 of GCC.

like image 45
Stephan S. Avatar answered Oct 24 '22 05:10

Stephan S.