在 Fortran 90 中不是语言意义上的。特定处理器可能会提供此功能作为诊断功能,但它们不是必需的。
在自动接口生成方面——我知道的一个处理器(Intel Fortran)具有合适的命令行选项,将为它遇到的每个外部过程写出接口块。它使用它来检查外部过程的接口。我已经看到一些用户出于与您自己类似的原因而收获这些界面块。不过,这依赖于非常特定于处理器的行为,并且该行为的不时变化偶尔会破坏这种安排。
在 Fortran 2003 中,可能存在进行一致性检查的可能性。该方法是在一个单独的模块中声明基于接口块的过程指针。然后,在每个实际过程中,将模块与过程指针一起使用,并(可能在调试 if 构造或类似结构中)尝试将相关过程指针与实际过程相关联。编译器不需要诊断过程指针显式接口中的不匹配,但大多数都应该。请参阅此论坛帖子末尾的帖子以进行一些讨论(请注意,F2008 标准中有一个错误,该错误正式“未能为过程指针分配提供解释”,但我认为这将在勘误二中得到纠正)。
在将您的界面块打包给最终用户方面,考虑将它们放在一个模块中并为该模块提供源代码。这将使您在将来可以为用户提供的内容方面具有更大的灵活性。
MODULE interfaces
IMPLICIT NONE
PRIVATE
PUBLIC :: external
INTERFACE
SUBROUTINE external(arg)
IMPLICIT NONE
INTEGER, INTENT(IN) :: arg(:)
END SUBROUTINE external
END INTERFACE
END MODULE interfaces
MODULE proc_pointers
USE interfaces
IMPLICIT NONE
PRIVATE
LOGICAL, PARAMETER, PUBLIC :: check_flag = .TRUE.
PROCEDURE(external), POINTER, PUBLIC :: external_pptr
END MODULE proc_pointers
SUBROUTINE external(arg)
USE proc_pointers
IMPLICIT NONE
INTEGER, INTENT(IN) :: arg(:)
IF (check_flag) external_pptr => external
...
END SUBROUTINE external