所以我有一个Fortran函数的代码,我很好奇参数X发生了什么?
DOUBLE PRECISION FUNCTION PBOIL(NGamma,T,X)
IMPLICIT DOUBLE PRECISION(A-H,O-Z)
DIMENSION X(NGamma),GAMMA(NGamma)
当X传入时,X是一个数组吗?在第3行中声明的X是否与参数X不同?
答案 0 :(得分:0)
第一行将函数PBOIL定义为具有三个参数。
第二行表示默认情况下,名称以字母A-H和O-Z开头的变量(包括参数)将被声明为DOUBLE PRECISION(而不是单精度)浮点。
第三行表示参数X和局部变量GAMMA是长度为NGamma的数组。
几乎所有的FORTRAN教科书都应该解释上述内容。
我没有使用任何“现代”FORTRAN编译器。我最后一次真正感动FORTRAN是在20世纪80年代中期。根据我的经验,我会对尝试在FORTRAN中声明一个动态大小的本地数组感到非常不舒服。我不明白为什么MODERN编译器无法做到这一点,因为现在几乎每台机器都有一个不错的运行时堆栈,但我使用的机器却没有这样做。 (CDC 6600,我第一次学习FORTRAN的机器, NOT 有一个堆栈,我很确定它的FORTRAN编译器不允许使用可变尺寸的本地数组。)
答案 1 :(得分:0)
回答你的问题:
是。它是一个DOUBLE PRECISION
数组,其一个维度为NGamma
。
首先,术语:在Fortran中,X是一个伪参数(与调用者的实际参数相关联)。在Fortran中,PARAMETER
是一个完全不同的野兽:PARAMETER
在Fortran中被命名为常量。
所以是的,作为伪参数的X与DIMENSION
语句中的相同。它从IMPLICIT DOUBLE PRECISION
语句中获取其类型。
现代的意识形态Fortran会声明类似
的声明 DOUBLE PRECISION, DIMENSION(NGamma), INTENT(IN) :: X
这将使读者清楚这是一个数组伪参数 这个功能不允许改变。
GAMMA
被声明为与X
形状相同的数组。这曾经是无效的FORTRAN 77(但被许多编译器接受为扩展),但对Fortran 90或更高版本来说完全没问题。