Fortran通用接口中的模糊接口

时间:2014-05-23 06:07:46

标签: fortran generic-interface

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

  

不明确的界面' sortic4'和' sortic'在通用界面' sorti'在(1)

        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

有什么问题?

1 个答案:

答案 0 :(得分:6)

前两个子程序(SORTICSORTIC4)具有完全相同的伪参数类型,种类和维度(等级)。 TKR分辨率因此不能区分它们,它们是模棱两可的。它们必须在某些属性上有所不同才能在通用接口中使用。

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

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