[心得] 關於entry的用法(與recursive的關係)
最近在練習這個冷門用法(為了避免使用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://www.ptt.cc/bbs/Fortran/M.1557730078.A.0AD.html
→
05/15 01:42,
5年前
, 1F
05/15 01:42, 1F
發現假想的地方與實驗結果不同,已修正
※ 編輯: fragmentwing (42.77.10.94), 05/16/2019 06:55:58
推
05/16 12:01,
5年前
, 2F
05/16 12:01, 2F
對 但是沒想到entry自己也算
不過這也符合我上一篇對recursive這個形容的意義的猜想
※ 編輯: fragmentwing (42.77.10.94), 05/16/2019 15:25:13
Fortran 近期熱門文章
PTT數位生活區 即時熱門文章