gfortran:错误:(1)处的“rfunct”接口必须是显式的

问题描述 投票:0回答:1

我在使用 gfortran 编译 Fortran 代码时遇到以下错误

Error: Interface of ‘rfunct’ at (1) must be explicit

接口被定义为这样的模块的一部分。

 interface
    subroutine ifunct(rfunct)  bind(c)
      import :: c_double
      real (kind=c_double), external, bind(c) :: rfunct
    end subroutine
  end interface

这里,

rfunct
是调用例程传递的函数指针。例如。,

call setvalue(rang)

这里,

rang
是被调用的实际函数,在单独的模块中定义为公共函数,并返回实数(R8)值。

我尝试使用多个编译器编译此代码。使用g95,可以成功编译。我正在尝试使用 gfortran 做同样的事情,因为 g95 没有得到积极维护。

fortran
1个回答
0
投票

声明函数时,无论在哪里,绝对不允许使用

这样的形式
real, external, bind(c) :: func

这明显违反了 Fortran 标准。1

类似的函数声明

real, external :: func

表示

func
是一个函数,其函数结果为REAL类型,并且它有一个隐式接口。 gfortran 的错误消息有点不对劲,但试图说
func
具有 BIND 属性意味着
func
应该具有 an explicit 接口。 这是一个矛盾。

您需要决定

func
是否具有隐式或显式接口。

如果您希望问题的虚拟过程

rfunct
有一个隐式接口,您可以使用
real(kind=..), external :: rfunct
形式;如果您希望它有一个显式接口,您需要提供该接口(使用
procedure
语句或接口块)。

由于

rang
(实际参数过程)是一个公共模块过程,因此使用显式接口似乎是合理的。


1 在 Fortran 2023 中为 C803。

© www.soinside.com 2019 - 2024. All rights reserved.