我正在查看用 Fortran 编写的空气质量模型的代码,并且对 fortran 从 do 循环中传递变量的方式有一些疑问。
这个非常简单的例子说明了我的意思:
PROGRAM carla
IMPLICIT NONE
!
INTEGER, PARAMETER :: LM = 24, DEZASSEIS = 16
INTEGER :: L, VARIAVEL, SOMA
!
DO L=1,LM
WRITE(*,*) 'L = ', L
END DO
!
WRITE(*,*) 'I am now ouside of the DO loop.'
WRITE(*,*) 'I would expect L=LM=24... And SOMA=40'
WRITE(*,*) 'L = ', L
SOMA = DEZASSEIS + L
WRITE(*,*) 'SOMA = ', SOMA
END PROGRAM carla
Run Code Online (Sandbox Code Playgroud)
我希望 L=LM=24... 而 SOMA=40... 但我得到:
L = 25 …Run Code Online (Sandbox Code Playgroud) 我读过,取决于函数结果变量的值是非标准的 Fortran。
integer function my_sum(x, n)
integer, dimension(n), intent(in) :: x
integer , intent(in) :: n
integer :: i
my_sum = 0
do i = 1, n
my_sum = my_sum + x(i) ! Error! Cannot re-use my_sum
end do
end function
Run Code Online (Sandbox Code Playgroud)
相反,我们必须使用局部变量并在函数末尾对其进行赋值。需要明确的是,我并不期望该值在调用之间保存,而是在函数体内保存,就好像它是局部变量一样。
此说法在 Fortran 90 或更高版本中正确吗?它适用于我的编译器(英特尔),但我不确定这是否是标准的,并且除了在线随机大学幻灯片之外还没有找到任何东西。
编辑:我找到了函数名称的来源。它位于本演示文稿的幻灯片 4 中,链接来自官方 fortran-lang.org 网站。
函数中的某处必须有一个或多个如下所示的赋值语句:
函数名 = 表达式
其中表达式的结果保存到函数的名称中。
请注意,函数名称不能出现在任何表达式的右侧。