看板 Fortran 關於我們 聯絡資訊
最近在練習這個冷門用法(為了避免使用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
blc: 可以用if (逃) 05/15 01:42
發現假想的地方與實驗結果不同,已修正 ※ 編輯: fragmentwing (42.77.10.94), 05/16/2019 06:55:58
hiyiyi: 若要自己call自己,都要加recursive 05/16 12:01
對 但是沒想到entry自己也算 不過這也符合我上一篇對recursive這個形容的意義的猜想 ※ 編輯: fragmentwing (42.77.10.94), 05/16/2019 15:25:13