研究某个程序包的时候突然发现罕见的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语句还是不应该存在。