使用某些旧代码时,我发现了以下Fortran函数声明。下面的代码片段显示了函数声明和参数声明。我相信Fortran是不区分大小写的语言。
SUBROUTINE CLIP2G (fcut,TIME,NUMS,NUMG,CLIPG,CLIPGL,CLIPGR,MODE,PHZ)
real fcut, TIME,
integer NUMS, NUMG
DIMENSION CLIPG(1)
REAL clipgr(1),clipgl(1)
INTEGER MODE
LOGICAL PHZ
DIMENSION CLIPG(1)
语句的含义是什么?我找到了一个link语句的相当简洁的解释,但是主要是作为C / C ++程序员,我发现该概念很难理解。请注意
REAL clipgr(1), clipgl(1)
后跟方括号(1)
的方式。这是长度为1且类型为REAL
的数组吗?在Stack Overflow上还有其他一些链接,但即使在下面的链接中给出的类似C的语法中,我也不确定其含义。
Fortran Function explanation
也许
DIMENSION CLIPG(1)
等同于REAL CLIPG
语句?最接近的C语言等效语言是什么? 最佳答案
DIMENSION
用于向编译器指示该变量是一个数组。在这种情况下,DIMENSION CLIPG(1)
声明CLIPG
为一个元素的数组。它还隐式地键入为REAL
,因此等效声明为:
REAL CLIPG(1)
等效的C构造为
..., float clipg[1], ...
请注意,这可能并不意味着
CLIPG
实际上只是一个元素的数组。它也可以用作(非常糟糕的)方式向编译器解释CLIPG
是大小可变的数组(例如,您可以使用5个元素的数组调用此子例程一次,然后使用50000的数组再次调用此子例程元素)。它被声明为只有一个元素,因此编译器知道它是一个数组,但是如果实际参数是一个更大的数组,则可以超出其末尾对其进行访问。这是一个非常糟糕的做法,但是您可以在许多非常古老的Fortran代码中使用它。FORTRAN 77提供了另一种描述此类数组的方法:
REAL CLIPG(*)
要么
DIMENSION CLIPG(*)
这样的数组称为假定大小数组。只能将伪例程参数声明为假定大小的数组,并且只能省略该数组的最后一个维度,例如
DIMENSION CLIPG2D(10,*)
(但不是
DIMENSION CLIPG2D(*,10)
)这意味着
CLIPG2D
是something x 10
矩阵(Fortran按列存储矩阵),并且something
可能会有所不同。每当使用假定大小的数组时,还必须向例程明确提供省略的维的大小。在C语言中,可以使用
float clipg[]
或float *clipg
。关于fortran - 对Fortran中的DIMENSION CLIPG(1)语句的概念理解,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13532900/