Fortran Coder

查看: 52|回复: 4

[子程序] FORTRAN77数组声明语法问题?

[复制链接]

6

帖子

2

主题

0

精华

入门

F 币
43 元
贡献
25 点
发表于 2017-9-26 11:41:57 | 显示全部楼层 |阅读模式
最近在看一套以前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 
回复

使用道具 举报

1126

帖子

12

主题

5

精华

论坛跑堂

Fcode跑堂

F 币
975 元
贡献
820 点

新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

发表于 2017-9-26 11:48:59 | 显示全部楼层
这种叫做“假定大小”,是非常不推荐使用的一种虚参数组定义方式。

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

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

具体区别,你可以收看本论坛视频教程,关于函数的章节 http://v.fcode.cn/video-subroutine_and_function.html

6

帖子

2

主题

0

精华

入门

F 币
43 元
贡献
25 点
 楼主| 发表于 2017-9-26 11:58:22 | 显示全部楼层
fcode 发表于 2017-9-26 11:48
这种叫做“假定大小”,是非常不推荐使用的一种虚参数组定义方式。

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

谢谢,明白了,最近一直在用FORTRAN90的语法在改以前77的一些老代码,老的语法确实从规避错误的规范上有很多不足。

6

帖子

2

主题

0

精华

入门

F 币
43 元
贡献
25 点
 楼主| 发表于 2017-9-26 12:01:00 | 显示全部楼层
fcode 发表于 2017-9-26 11:48
这种叫做“假定大小”,是非常不推荐使用的一种虚参数组定义方式。

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

可不可以把数据封装进module,在子程序中使用module模块,这样可以避免子程序再重复定义,也可以解决这个不规范的操作

1126

帖子

12

主题

5

精华

论坛跑堂

Fcode跑堂

F 币
975 元
贡献
820 点

新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

发表于 2017-9-26 16:23:40 | 显示全部楼层
看情况而定。我觉得你改成假定形状可能更合适。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

QQ|捐赠本站|Archiver|关于我们 About Us|QQ群|Fcode

GMT+8, 2017-10-20 05:51

Powered by Discuz! X3.2

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表