指向FORTRAN中的子程序的指针

时间:2012-01-04 21:48:13

标签: pointers fortran subroutine

  

可能重复:
  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的另一种方法吗?

再次感谢。

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:3)

感谢您的回答。

问题最终是我的子程序名称是DO_CALC,并且出于某种原因声明

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

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

janneb很好的想法使用派生类型的数组而不是Fortran中不允许的函数指针数组。