Fortran中go to语句的罕见用法

研究某个程序包的时候突然发现罕见的go to 语句go to (35,35,36) ,i这种形式的,头疼的是网上还找不到相关的介绍,这个程序包也不是那么老的,不能理解它这里为什么要用go to语句。但不管怎么样,为了看懂代码,只能自己想办法确定一下go to语句的作用。首先它不是一般的go to语句,一般的都是go to 11这种后面直接接数字的,试了一下后面接括号的话会报错,如果是如下

program main
    implicit none
    integer*4::i,j,k
    1   write(*,*)'-1'
    2   write(*,*)'-2'
    !go to 3
    do i=1,4
        go to (1,1,1,2),i
        write(*,*)i
    enddo
3   stop
end program main

或者

program main
    implicit none
    integer*4::i,j,k
    1   write(*,*)'-1'
    2   write(*,*)'-2'
    !go to 3
    i=1
        go to (1,1,1,2),i
        write(*,*)i
3   stop
end program main

结果会一直循环

 -1
 -2
 -1
 -2
 -1
 -2
 -1
 -2
 -1
 -2
 ...

但是如果

program main
   implicit none
   integer*4::i,j,k
   1   write(*,*)'-1'
   2   write(*,*)'-2'
   !go to 3
   !do i=1,4
   i=0
       go to (1,1,1,2),i
       write(*,*)i

   !enddo

3   stop
end program main

结果不会循环

-1
 -2
           0

最后根据我所要研究的程序的代码,才理解了它的用法

program main
    implicit none
    integer*4::i,j,k


    !go to 3
    do i=1,4
        go to (1,1,1,2),i
        write(*,*)i
    1   write(*,*)'-1'
    2   write(*,*)'-2'
    enddo

3   stop
end program main
-1
 -2
 -1
 -2
 -1
 -2
 -2

循环下面接go to语句,括号中依次为每次循环时跳转的位置,比如(1,1,1,2)就是前三次循环跳到语句1,后一次跳到语句2,这样最终结果也能理解了。但是跳转语句在循环外也不会报错,但那样的话很容易造成无限循环的问题,所以正确用法还是在循环内。所以说的话,某些时候确实是需要go to语句的,如果不用go to语句的话,就需要更繁琐的判断语句代替了,但即使如此,如果是我的话还是不会选择go to语句的,go to语句还是不应该存在。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值