Fortran Coder

标题: FORTRAN77数组声明语法问题? [打印本页]

作者: zengkehl    时间: 2017-9-26 11:41
标题: FORTRAN77数组声明语法问题?
最近在看一套以前FORTRAN77写的程序,请问下下面子程序中声明的数组中(*)是什么意思,程序大致框架示意如下,程序中省略号指代其他未显示的代码参量或语句:
[Fortran] 纯文本查看 复制代码
program abc

REAL headw(maxwav),sinb(maxwav) !maxwav从其他文件读入,这里不做特殊声明


call hdy(headw,sinb,..........)
..............


end program abc


subroutine hdy(headw,sinb,..........)
REAL headw(*),sinb(*) !这里怎么成了*号?
..........


end

作者: fcode    时间: 2017-9-26 11:48
这种叫做“假定大小”,是非常不推荐使用的一种虚参数组定义方式。

它的潜台词是,headw 和 sinb 两个是数组,具体有多大,我不知道,到时候对应的实参有多大,你就实际能用多大。反正自己控制好,越界了我不负责。

目前比较推荐的虚参数组传递方法,是用“假定形状”或“指针”传递。

具体区别,你可以收看本论坛视频教程,关于函数的章节 http://v.fcode.cn/video-subroutine_and_function.html
作者: zengkehl    时间: 2017-9-26 11:58
fcode 发表于 2017-9-26 11:48
这种叫做“假定大小”,是非常不推荐使用的一种虚参数组定义方式。

它的潜台词是,headw 和 sinb 两个是数 ...

谢谢,明白了,最近一直在用FORTRAN90的语法在改以前77的一些老代码,老的语法确实从规避错误的规范上有很多不足。
作者: zengkehl    时间: 2017-9-26 12:01
fcode 发表于 2017-9-26 11:48
这种叫做“假定大小”,是非常不推荐使用的一种虚参数组定义方式。

它的潜台词是,headw 和 sinb 两个是数 ...

可不可以把数据封装进module,在子程序中使用module模块,这样可以避免子程序再重复定义,也可以解决这个不规范的操作
作者: fcode    时间: 2017-9-26 16:23
看情况而定。我觉得你改成假定形状可能更合适。




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2