每当我在Fortran中编程时,我都会使用模块,而且我不必担心编写接口。
现在我正在编写Fortran代码以在内部使用R.问题是子程序不能在模块中,所以我"有"写接口。如果我不编写接口,一切正常,但智能互联网用户说我应该编写接口。
有人可以解释我为什么吗?有什么好处?
答案 0 :(得分:4)
作为Alexander Vogt says,接口块可用于提供通用标识符并允许某些编译器检查。
如果您正在使用接口块来创建通用标识符,那么您可能在模块中这样做,因此在模块不是关于编写此类块的主要原因是它们的显式接口在它们发生的范围内创建。正是这些允许那些编译器检查以及与模块的使用关联不再发生。
但是,有时候需要一个显式接口,而不是一个精确的接口:如果引用具有某些功能的过程,则代码需要一个显式接口才能符合Fortran标准。这些功能可以在F2008,12.4.2.2
中找到语句函数以外的过程如果被引用则应具有显式接口
- 出现对程序的引用 (a)带有参数关键字(12.5.2)或
(b)在要求纯洁的背景下,- 程序有一个伪参数,即 (a)具有ALLOCATABLE,ASYNCHRONOUS,OPTIONAL,POINTER,TARGET,VALUE或VOLATILE属性,
(b)是假定形状的阵列,
(c)是一个coarray,
(d)属于参数化派生类型,或
(e)是多态的,- 程序的结果是 (a)是一个数组,
(b)是指针或可分配,或
(c)具有非假定类型参数值,该值不是常量表达式,- 该程序是基本的,或
- 该过程具有BIND属性。
醇>
除此之外,隐式接口就足够了,并且不需要interface
块。但仍然可以提供帮助。
在您的情况下,它仅适用于接口具有此影响的各种Fortran组件之间的调用。所以,你并不总是需要编写接口,有些东西可以在没有接口的情况下工作。
答案 1 :(得分:2)
主要好处是编译器可以执行参数检查。这样,它可以警告您编程错误,否则将很难检测到。
接口的另一个好处是你可以捆绑功能。例如,考虑sin
函数,该函数是针对不同类型的real
和complex
参数定义的。
使用接口,可以为不同类型的变量调用相同的函数。
对于现代Fortran的某些功能,例如函数指针,通常需要接口。
答案 2 :(得分:2)
稍微多一点"哲学"从上述处理接口特定用途的优秀答案的角度来看。
您声明所有变量都不是吗?据推测,你这样做是为了保护自己免受错别字,偶然错误和滥用变量的影响,并避免读者偶尔知道神秘的规则,以及其他原因。那你为什么不想为你所有的子程序做同样的事情呢?以上所有内容都适用。