【问题标题】:Pointers to subroutines in FORTRAN [duplicate]指向 FORTRAN 中子例程的指针
【发布时间】:2012-01-04 21:48:13
【问题描述】:

可能重复:
Function pointer arrays in Fortran
How to alias a function name in Fortran

在 FORTRAN 中,如何创建和使用指向子程序的指针?

此外,是否有可能在不同的子程序中有一个空洞的指针数组?

我知道这些东西可以用 C 轻松实现,但是 FORTRAN 呢?

编辑

我尝试过使用命令:

PROCEDURE (), POINTER :: pMYSUB => NULL()

我使 pMYSUB 指针指向子程序:

pMYSUB => MYSUB 

我也把MYSUB子程序放到INTERFACE中:

INTERFACE 
   SUBROUTINE MYSUB 
   END SUBROUTINE
END INTERFACE

MYSUB 子例程没有参数。问题是当我使用时:

call pMYSUB

我收到链接错误:未解析的外部符号 _pMYSUB。 我做错了什么? 命令:

POINTER(pMYSUB, MYSUB)

是另一种使 pMYSUB 指向子程序 MYSUB 的方法吗?

【问题讨论】:

标签: pointers fortran subroutine


【解决方案1】:

Fortran 中的函数指针称为“过程指针”,是 Fortran 2003 标准的一部分。现在许多现代编译器都支持它们。还有一种非常有限的函数指针形式至少可以追溯到 F77,在那里你可以有一个过程参数,它是一个过程;但是,您不能在 F2003 之前拥有正常的函数指针变量。如果您根据上述内容在谷歌上搜索某些内容后仍有问题,请发布您正在编写的一些代码,我相信有人会帮助您。

写。一个指针数组,由于某种原因是不允许的。常见的解决方法是创建一个带有指针组件的派生类型,然后将这些派生类型组成一个数组。

【讨论】:

  • 感谢您的快速回答。我已经编辑了我的第一篇文章。
【解决方案2】:

问题是我的子程序的名称是 DO_CALC,并且出于某种原因,语句:

PROCEDURE (DO_CALC), POINTER :: pDO_CALC => NULL()

不喜欢编译器。我更改了子程序的名称,现在可以正常工作了!

@Janneb,使用派生类型数组而不是 Fortran 中不允许的函数指针数组是个好主意。

【讨论】:

  • 肯定有另一个错误。没有理由为什么它应该与一个名称而不是另一个名称一起使用。
  • 我得到的错误是 DO_CALC 名称是:错误 #5082:语法错误,当期望以下之一时发现 'DO':) TYPE COMPLEX BYTE CHARACTER DOUBLE DOUBLECOMPLEX DOUBLEPRECISION INTEGER LOGICAL ... 错误# 8169: 未声明指定的接口。 [_CALC]
  • @helios21:听起来像是解析器中的错误,请向编译器供应商报告。
猜你喜欢
  • 1970-01-01
  • 2022-01-15
  • 1970-01-01
  • 2013-07-06
  • 1970-01-01
  • 1970-01-01
  • 2018-11-15
  • 1970-01-01
相关资源
最近更新 更多