0

我对 Fortran 不熟悉。这是一个带有一些子程序的通用接口。gfortran 4.8 抱怨说:

(1) 通用接口“sorti”中的模糊接口“sortic4”和“sortic”

        INTERFACE SORTI

            SUBROUTINE  SORTIC( N, IND, TBLC )
            INTEGER      , INTENT(IN   ) :: N
            INTEGER      , INTENT(INOUT) :: IND( N )
            CHARACTER*(*), INTENT(IN   ) :: TBLC( * )
            END SUBROUTINE  SORTIC

            SUBROUTINE  SORTIC4( N, IND, TBLC )
            INTEGER      , INTENT(IN   ) :: N
            INTEGER      , INTENT(INOUT) :: IND( N )
            CHARACTER*(*), INTENT(IN   ) :: TBLC( * )
            END SUBROUTINE  SORTIC4

            SUBROUTINE  SORTIC8( N, IND, TBLC )
            INTEGER(8)   , INTENT(IN   ) :: N
            INTEGER(8)   , INTENT(INOUT) :: IND( N )
            CHARACTER*(*), INTENT(IN   ) :: TBLC( * )
            END SUBROUTINE  SORTIC8

            SUBROUTINE  SORTI1( N, IND, TBL1 )
            INTEGER, INTENT(IN   ) :: N
            INTEGER, INTENT(INOUT) :: IND( N )
            INTEGER, INTENT(IN   ) :: TBL1( * )
            END SUBROUTINE  SORTI1
             ....
        END INTERFACE

代码来自ioapi3.1库,m3utilio.f:http ://www.baronams.com/products/ioapi/index.html

怎么了?

4

1 回答 1

8

您的前两个子例程 (SORTICSORTIC4) 具有完全相同的虚拟参数类型、种类和维度(等级)。因此,TKR 决议无法区分它们,它们是模棱两可的。它们必须在其中一些属性上有所不同才能在通用接口中使用。

第二个和第三个的种类不同,这没关系。(默认integerinteger(8), kind8不可移植,但通常与默认不同。)第一个和第二个是相同的。

我查看了库的源代码。我的结论是,这个通用接口不符合 Fortran 90 和更高版本的标准。因此,我将首先将其更改为仅用于显式接口的常规接口块,即删除SORTI单词后面的名称interface,并直接调用各个子例程。

于 2014-05-23T06:34:41.123 回答