MvG*_*MvG 17 fortran exit-code exit gfortran
我正在修改一些我没有写过的Fortran代码,而且我自己没有很多的经验.我刚刚发现了一些情况,其中一些格式错误的输入被默默地忽略,并且想要更改该代码以做更合适的事情.如果这是C,那么我会做类似的事情
fprintf(stderr, "There was an error of kind foo");
exit(EXIT_FAILURE);
Run Code Online (Sandbox Code Playgroud)
但在fortran中,我知道如何做的最好看起来像
write(*,*) 'There was an error of kind foo'
stop
Run Code Online (Sandbox Code Playgroud)
缺乏输出流(次要问题)和退出状态(主要问题)的选择.
如何终止具有非零退出状态的fortran程序?
如果这是依赖于编译器的,那么与gfortran一起使用的解决方案会很好.
M. *_* B. 20
该stop语句允许整数或字符值.似乎这些将在存在时输出到stderr,但由于stderr是依赖于操作系统的,因此Fortran语言标准不太可能要求它,如果它说什么的话.如果使用数字选项,也可能会设置退出状态.我在Mac上用gfortran尝试过,情况就是这样:
program TestStop
integer :: value
write (*, '( "Input integer: " )', advance="no")
read (*, *) value
if ( value > 0 ) then
stop 0
else
stop 9
end if
end program TestStop
Run Code Online (Sandbox Code Playgroud)
虽然stop具有整数或字符串的功能与操作系统相关,但该语句是语言的一部分并且将始终进行编译. call exit是一个GNU扩展,可能不会链接到某些操作系统.
小智 10
除了停止n之外,自Fortran 2008以来还有错误停止n.在Windows下使用gfortran时,它们都会将错误号发送到操作系统,这可以通过后续操作看到echo %errorlevel%.语句错误停止也可以传递错误消息.
program bye
read *, n
select case (n)
case (1); stop 10
case (2); error stop 20
case (3); error stop "Something went wrong"
case (4); error stop 2147483647
end select
end program
Run Code Online (Sandbox Code Playgroud)