[心得] 关于entry的用法(与recursive的关系)

楼主: fragmentwing (片翼碎梦)   2019-05-13 14:47:55
最近在练习这个冷门用法(为了避免使用goto还真是绞尽脑汁)
范例:
program entrytest
call suba
stop
end program
subroutine suba
write(*,*) "front"
call en2
return
write(*,*) "middle"
entry en2
write(*,*) "back"
return
end
这个写法,编译器是不给过的,它会回报这个subroutine具有递归性质(recursion)
于是我很天才地给它加上recursive叙述
program entrytest
call suba
stop
end program
recursive subroutine suba
write(*,*) "front"
call en2
return
write(*,*) "middle"
entry en2
write(*,*) "back"
return
end
这样编译器给过,显示结果为
front
back
嗯,所以只要有这种必须进行到一半就return的,都得加上recursive叙述的样子
顺带一提另外一次实验得到,假如把return拔掉,会执行成
front
back !执行en2 entry后面的地方
middle !en2执行完毕,suba继续执行call en2的下一行
back
至于这个用法,就是用来在我们有时希望程式只执行某些流程的话,就可以这样使用
可以把front、middle、back假想成程式的三个部分
也许front执行完后得到的某些结果,我们希望直接往back走,就可以这样来跳过middle
当然,一般来说只要把front、middle、back都写成subroutine就能解决这种问题
不过这样宣告之类的都得重弄,很不方便
给有兴趣的大家参考看看
作者: blc (Anemos)   2019-05-15 01:42:00
可以用if (逃)
作者: hiyiyi   2019-05-16 12:01:00
若要自己call自己,都要加recursive

Links booklink

Contact Us: admin [ a t ] ucptt.com