[心得] 關於entry的用法(與recursive的關係)

看板Fortran作者 (片翼碎夢)時間5年前 (2019/05/13 14:47), 5年前編輯推噓1(101)
留言2則, 2人參與, 5年前最新討論串1/1
最近在練習這個冷門用法(為了避免使用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
可以用if (逃)
05/15 01:42, 1F
發現假想的地方與實驗結果不同,已修正 ※ 編輯: fragmentwing (42.77.10.94), 05/16/2019 06:55:58

05/16 12:01, 5年前 , 2F
若要自己call自己,都要加recursive
05/16 12:01, 2F
對 但是沒想到entry自己也算 不過這也符合我上一篇對recursive這個形容的意義的猜想 ※ 編輯: fragmentwing (42.77.10.94), 05/16/2019 15:25:13
文章代碼(AID): #1SsHCU2j (Fortran)
文章代碼(AID): #1SsHCU2j (Fortran)