在Fortran中,是否可以将函数放在公共块中,如下所示: COMMON / myblock / func (其中x是某个变量,func是函数)。
我的问题是我想创建一个调用外部函数func(x)但不在s(x)中传递func的函数s(x)。对于我的项目,s(x)必须只是一个变量的函数,即我不想这样做: 函数s(x,func) S = FUNC(x)的
相反,我希望我能做到: 函数s(x) common / myblock / func S = FUNC(x)的或者,如果某人有其他建议使用模块或其他东西,这将是很好的。
提前感谢您的帮助。
0
然后在调用s(x)的子例程中使用相同的公共(myblock)。
答案 0 :(得分:2)
我不相信这可以通过任何便携方式实现。某些实现可能允许您使用一些技巧来执行此操作。
答案 1 :(得分:2)
现代的方法是使用指向函数的指针。指针可以作为参数传递,或者,对于此问题的设计,可以将其放入模块中。例如,请参阅Function pointer arrays in Fortran
答案 2 :(得分:1)
我认为你不应该为此使用公共块,而是模块。将您的函数func
放在名为myfunctions
的模块中,然后在需要时插入use myfunctions
语句就可以了。
答案 3 :(得分:1)
现代的fortran标准禁止这样做。从Fortran 2003的5.5.2开始:
common-block-object不应该是......函数名,条目名......
无论如何,使用全局变量来传递非常量数据只是一个可怕而可怕的想法。正如ja72指出的那样,你可以用模块做到这一点,但我拒绝用示例代码来演示它。