Fortran:如何在公共块中传递函数名称

时间:2011-05-22 15:44:18

标签: function fortran block fortran-common-block

在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)。

4 个答案:

答案 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指出的那样,你可以用模块做到这一点,但我拒绝用示例代码来演示它。