今天看了个代码,发现用data赋值的小问题,单独拎出来尝试一下如代码所示。
program main
implicit none
integer a,i
a = 0
a = a+1
do i = 1,20
call func()
enddo
stop
end program main
subroutine func()
implicit none
integer a
data a/0/
a = a + 1
end subroutine
将上述示例代码运行,可以发现,在子程序中的a有save属性,每次循环调用func的时候,func里的a会随着循环累加1,而主程序的a不会变化,依旧是1。和如下代码一致
program main
implicit none
integer i,a
a = 0
a = a+1
do i = 1,20
call func()
enddo
stop
end program main
subroutine func()
implicit none
integer,save:: a
if (a .eq. 0) write(*,*) a
a = a + 1
end
这是要注意的,我也是第一次发现这个问题,是Fortran的机制还是我理解错了?可以一起讨论,共勉。