我对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
有什么问题?
答案 0 :(得分:6)
前两个子程序(SORTIC
和SORTIC4
)具有完全相同的伪参数类型,种类和维度(等级)。 TKR分辨率因此不能区分它们,它们是模棱两可的。它们必须在某些属性上有所不同才能在通用接口中使用。
第二个和第三个不同的种类,这是可以的。 (默认integer
和integer(8)
,种类8
不可移植,但通常与默认值不同。)第一个和第二个相同。
我查看了库的源代码。我的结论是,这个通用接口不符合Fortran 90及更高版本的标准。因此,我首先将其更改为仅用于显式接口的常规接口块,即在单词SORTI
之后删除名称interface
,并直接调用各个子例程。