【发布时间】:2021-12-24 11:25:58
【问题描述】:
在旧的 Fortran 代码中,找到这种结构是相对常见的:
irc=0
...
if (foo) goto 10
...
if (bar) goto 10
...
return
10 irc=1
return
即,irc 变量保存返回码,每当发生错误时,一个简单的goto 10 即可完成设置值和从子例程返回。
在现代代码中,人们不惜一切代价试图避免gotos (https://xkcd.com/292/),重写它的最佳方法是什么?微不足道的内联会导致大量代码重复和替换 returns(看起来几乎和 gotos 一样糟糕):
irc=0
...
if (foo) then
irc=1
return
end if
...
if (bar) then
irc=1
return
end if
...
return
为了避免代码重复,可以使用内部子例程(尤其是如果每次要重复多个语句),但这仍然会留下returns。或者有什么方法可以强制从内部子程序返回主机子程序?还有其他解决方案吗?
【问题讨论】: