Fortran77中,DATA赋值的变量有SAVE属性

文章讨论了在Fortran编程中,使用data语句初始化的子程序内变量a具有save属性,导致每次循环调用子程序func时,变量a会持续累加,而主程序中的a保持不变。这一行为是Fortran语言的特性,提醒程序员注意变量的作用域和持久化行为。
摘要由CSDN通过智能技术生成

今天看了个代码,发现用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的机制还是我理解错了?可以一起讨论,共勉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

空花缱绻三分

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值