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

发布于 2024-11-09 08:27:04 字数 375 浏览 0 评论 0原文

在 Fortran 中,是否可以将函数放在公共块中,如下所示: 常见 /myblock/ 函数 (其中 x 是某个变量,func 是一个函数)。

我的问题是我想创建一个函数 s(x) 来调用外部函数 func(x) 但不传递 func 到 s(x) 中。对于我的项目, s(x) 必须是只有一个变量的函数,即我不想这样做: 函数 s(x,func) s=func(x)

相反,我希望我可以这样做: 函数 s(x) 通用 /myblock/ 函数 s=func(x)

或者,如果有人有其他使用模块或其他东西的建议,这会很棒。

预先感谢您的任何帮助。

o。

然后在调用 s(x) 的子例程中具有相同的公共 (myblock)。

In Fortran, is it possible to put a function in a common block as in:
COMMON /myblock/ func
(where x is some variable and func is a function).

My problem is that I would like to create a function s(x) that calls an external function func(x) but without passing func in s(x). For my project, s(x) has to be a function of only one variable, i.e., I do not want to do:
function s(x,func)
s=func(x)

Instead, I am hoping I could do:
function s(x)
common /myblock/ func
s=func(x)

Or, if someone has some other suggestion using modules or something, this will be great.

Thanks in advance for any help.

o.

and then have the same common (myblock) in the subroutine that calls s(x).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

苏大泽ㄣ 2024-11-16 08:27:04

我认为这不可能以任何便携式方式实现。某些实现可能允许您使用一些技巧来做到这一点。

I don't believe that this is possible in any portable way. Some implementations may allow you to use some tricks to do it.

聚集的泪 2024-11-16 08:27:04

现代的方法是使用指向函数的指针。该指针可以作为参数传递,或者为了这个问题的设计,可以将其放入模块中。例如,请参阅Fortran 中的函数指针数组

The modern way to do this is with a pointer to a function. The pointer could be passed as an argument or, for the design of this question, placed into a module. See, for example, Function pointer arrays in Fortran

忆梦 2024-11-16 08:27:04

我认为你不应该为此使用公共块,而应该使用模块。将函数 func 放入名为 myfunctions 的模块中,然后在需要时插入 use myfunctions 语句,仅此而已。

I think you are not supposed to use common blocks for this, but modules. Put your function func in a module called myfunctions and then when needed insert at use myfunctions statement and thats it.

栖竹 2024-11-16 08:27:04

现代 Fortran 标准禁止这样做。从 Fortran 2003 的 5.5.2 开始:

公共块对象不应是...函数名称、条目名称...

并且无论如何,使用全局变量来传递非常量数据只是一个可怕的,糟糕的主意。正如 ja72 指出的,您可以使用模块来做到这一点,但我拒绝用示例代码来演示它。

Modern fortran standards prohibit this. From 5.5.2 of Fortran 2003:

A common-block-object shall not be ... a function name, an entry name...

And at any rate, using global variables to pass around non-constant data is just a terrible, terrible idea. As ja72 points out, you could do this with modules, but I refuse to demonstrate it with sample code.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文