最近在練習這個冷門用法(為了避免使用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就能解決這種問題
不過這樣宣告之類的都得重弄,很不方便
給有興趣的大家參考看看