Fortran通用接口中的模糊接口

zhe*_*ric 0 fortran generic-interface

我对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
Run Code Online (Sandbox Code Playgroud)

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

怎么了?

Vla*_*r F 6

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

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

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