【发布时间】:2016-06-28 07:28:20
【问题描述】:
以下最小示例:
L1: do while(.true.)
L2: do while(.true.)
if(something=.true.) exit L1
end do L2
end do L1
所以现在我想将内部循环 L2 写入单独模块中的子例程中,以便在编译代码时将它们链接在一起,例如 gfortran main.f95 innerloop.o -o somename
module innerloop
contains
subroutine innerloop()
L2: do.....
if(something=.true.) exit L1
...
end module innerloop
即使我通过具有全局变量的模块将循环名称设置为全局字符,我也会遇到各种错误。由于存在大量各种 if 情况,因此不知道将全局变量定义为标志并执行以下操作: 如果(某事=.true。)exitvar=.true。 然后在变量为 .true 时在每个子例程或函数后面编写一个 if-case。或不逐步退出所有循环。 是否有另一种方法可以在 de 模块的单独子例程中从内部循环退出外部循环?
【问题讨论】:
-
请注意,您需要
==进行逻辑比较。 -
还要注意
(something==.true.)==(something),与.true.的比较是多余的。 -
@HighPerformanceMark 也是非标准的。
-
@IanH:D'ohhh,当然也是这样。
-
出于历史兴趣,您过去可以通过 alternate return 来完成此任务。谢天谢地,这已经贬值了。
标签: loops module fortran exit subroutine