回 帖 发 新 帖 刷新版面

主题:[讨论]关于将函数封装在interface中以替代external声明的问题

一个程序a需要调用一个外部子程序c,而c的虚参中包含一个子程序b。
由于b需要使用一些主程序中的参数(而受b的参数列表的限制这些参数无法在参数列表中出现),只能将b作为主程序a的一个内部子程序。外部子程序c中用external语句声明参数列表中的b。这样的结构编译时没有问题。
 
     问题:程序c是别人的一个程序,在新版本中,其中的外部子程序声明都用显式接口块interface代替了external,这样,相应的主调程序a也要在其中将要传递给c的子程序b用显式接口声明,但现在b是a的一个内部子程序,不应声明的,所以编译时会出现错误。请问应如何处理这种情况?

回复列表 (共2个回复)

沙发

Program A
call bbb( c )
contains
 subroutine c()
   write(*,*) 'ccc'
 end subroutine c
 
End

Subroutine bbb( cc )
  interface
    subroutine cc()
    end subroutine cc
  end interface
  call cc()
End Subroutine bbb

这个代码我在 IVF 上可以执行,但有个警告:
1>Compiling with Intel(R) Visual Fortran 11.1.035 [IA-32]...
1>Source1.f90
1>F:\t\Console1\Source1.f90(2): warning #7601: F2003 standard does not allow an internal procedure to be an actual argument procedure name. (R1214.4).   [C]

所以我想其他编译器可能不允许执行。

那么楼主可以把 c 写成外部程序,不用 contains。

用 Module 在主程序a和子程序c之间共享数据

板凳

多谢了

我来回复

您尚未登录,请登录后再回复。点此登录或注册