我正在使用传统的Fortran 77代码子例程,其中参数类型未在代码块的顶部声明。
这是一个显示子程序顶部的片段。
SUBROUTINE BPASS(F1,F2,F3,F4,SI,N,A,IERR)
REAL * 4 A( N ),FV( 4 )
根据上述内容,我认为A
是一个长度为N
且数量为REAL *4
的数组,其大小与C float
相当。或者,FV(4)
是一个长度为4
的数组REAL *4
的数组。
但是,如果未列出类型,F1,F2,F3,F4,SI,N,IERR
的类型是什么? N
似乎应该是integer
。
我需要知道类型,以便我可以从C ++代码调用子例程。对于未声明的类型是否存在Fortran约定?
答案 0 :(得分:6)
默认情况下,Fortran会将类型integer
分配给名称以字母I,J,K,L,M,N
开头的变量,并将real
类型分配给所有其他未声明的变量。
我同意您解析A
和FV
的定义。
现代Fortran提供表达式implicit none
以确保不应用默认规则,但在处理旧代码时,有时无法避免熟悉旧的黑暗方式。
答案 1 :(得分:4)
在FORTRAN77
中,默认情况下,以I,J,K,L,M或N开头的变量为INTEGER
,否则为REAL
。 FORTRAN90
以及FORTRAN77
的某些变体提供了使用IMPLICIT NONE
禁用此功能的机制。