作者fragmentwing (片翼碎梦)
看板Fortran
标题[心得] 关於entry的用法(与recursive的关系)
时间Mon May 13 14:47:55 2019
最近在练习这个冷门用法(为了避免使用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就能解决这种问题
不过这样宣告之类的都得重弄,很不方便
给有兴趣的大家参考看看
--
羽毛未丰的片片翅翼,零落四散在各个时间的梦想
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 42.77.10.94
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Fortran/M.1557730078.A.0AD.html
1F:→ blc: 可以用if (逃) 05/15 01:42
发现假想的地方与实验结果不同,已修正
※ 编辑: fragmentwing (42.77.10.94), 05/16/2019 06:55:58
2F:推 hiyiyi: 若要自己call自己,都要加recursive 05/16 12:01
对 但是没想到entry自己也算
不过这也符合我上一篇对recursive这个形容的意义的猜想
※ 编辑: fragmentwing (42.77.10.94), 05/16/2019 15:25:13