【发布时间】:2013-02-19 22:12:24
【问题描述】:
我正在尝试使用过程指针(Fortran 2003 中的新功能)来指向基本函数,但它不起作用。我真的需要这个函数是ELEMENTAL 并且需要一个指向它的指针。在 Fortran 中指向元素函数真的不可能吗?
module elemfunc
implicit none
contains
elemental function fun111(x) result(y)
real*8, intent(in) :: x
real*8 :: y
y = x**2+1
end function fun111
end module elemfunc
program testptr
use elemfunc
implicit none
interface
elemental function func (z)
real*8 :: func
real*8, intent (in) :: z
end function func
end interface
procedure (func), pointer :: ptr
ptr => fun111
print *, ptr( (/1.0d0,2.0d0/) )
end program testptr
错误信息:
main.f90:12.7:ptr=>fun111
1
Nonintrinstic elemental procedure pointer 'func111' is invalid in procedure pointer assignment at (1)
【问题讨论】:
-
FWIW 你的代码对我来说编译和执行(显然)正确。我正在使用英特尔 Fortran 13.1.0.149。即使我将警告和语法检查提高到 11 次,编译器也不会发出任何抱怨。我不能说我确定您的代码符合标准,但我看不出它也不符合标准。
-
太棒了!我正在使用 gfortran 4.7(不确定...)。也许我应该更新我的 gfortran ???
-
@High Performance Mark 见NewFeatureFortran2003, seach 'elemental', 第一个匹配结果说 elemental INTERFACE is not allowed, 但不知道是不是和elemental FUNCTIONS一样...跨度>
-
最新的 gfortran 4.8 产生相同的结果。
标签: function pointers fortran procedure