我可以将格式语句传递给 Fortran 中的子例程吗?

Can I pass a format statement to a subroutine in Fortran?

我希望能够将 'format' 传递到 Fortran 子例程中。举个例子:

        write(6,1002) M1    
1002    format(A, "M1, Mach number at boundary layer edge", f8.3)

由于过于复杂的原因,无法进入此处,拥有一个通用函数会很有用,我向该函数发送一个带有用于写出的格式语句的变量。我想不出这样做的方法。

有什么想法吗?

忘记 FORMAT 语句,使用 格式化字符串

   string = '(A, "M1, Mach number at boundary layer edge", f8.3)'
   write(*,string) M1

您可以轻松地将字符串传递给子例程。

格式语句已经过时且难以使用。

此外,不要使用单位编号6,而是使用*,这样更便于携带。

您不能真正将格式语句传递给子例程。但是你可以传递一个格式字符串,比如:

fmtstr = '(A, "M1, Mach number at boundary layer edge", f8.3)'
...
call mysub(args, fmtstr)

然后

subroutine mysub(args, fmtstr)
    ...
    character(*), intent(in) :: fmtstr
    ...
    write(*,fmtstr) M1
end subroutine

有些人可能会争辩说,格式字符串是在所有情况下处理格式的最佳现代方式,并且已经完全停止使用格式语句。