你的问题的标题表现出一种误解,尽管文字表明你更了解。尽管如此,根据记录,write
是一个 Fortran 语句,它既不是子程序也不是函数。
我认为你有很多选择。我偶尔使用的一种方法是编写一个返回字符串的函数。也许
function error_message(error)
character(len=*), intent(in) :: error
character(len=:), allocatable :: error_message
error_message = 'ERROR: '//trim(error)
end function error_message
然后你可以像这样使用
write(*,*) error_message('Oh s**t')
您当然可以编写一个具有副作用的子例程或函数,其中包括写入输出通道,但如果采用这种方法,您必须小心遵守递归 I/O 的规则。
EDIT
OP发表评论后。
如果您想关闭调试消息,另一个选择是将它们定向到空设备或文件,例如/dev/null
在 Linux 或NUL
在 Windows 上。就像是
integer, parameter :: debug_channel = 99
logical, parameter :: debugging = .false.
...
if (debugging) then
open(debug_channel, file='NUL')
else
open(debug_channel, file='debuglog'
end if
进而
write(debug_channel,*) 'message'