这个问题已经存在了几年,但我从来没有听说过这个问题的好方法.
如果Fortran子例程包含具有自身接口的模块,
subroutine stuff(nz,z,dt)
use allinterfaces
...
则会发生错误
错误:在(1)导入的模块'allinterfaces'的'stuff'也是当前程序单元的名称
为了解决这个问题,我必须申报
subroutine stuff(nz,z,dt)
use allinterfaces, except_this_one => stuff
...
这是荒谬的行为,因为我喜欢在模块中包含所有接口,所以很烦人.这应该不是编译错误,或者至少应该有一个except_itself
我使用的编译器是gfortran版本4.8.2(GCC),但我怀疑这是编译器的错.
有没有人理解这种行为背后的理性,可能是误导,还是更实际的解决方案?
或许更荒谬的是,编译器可以使用此信息来检查模块中定义的接口是否与实际子例程匹配.所以它比它可能的两个级别更糟糕.忽视这些信息是错失的机会; 将它视为一个错误似乎是一个可怕的想法.