Fortran Coder

查看: 92|回复: 5

[求助] 我来问个非主流的问题:read和write的默认参数

[复制链接]

159

帖子

14

主题

0

精华

大宗师

F 币
3906 元
贡献
767 点
发表于 2020-7-22 02:16:03 | 显示全部楼层 |阅读模式
内置的read和write函数可以用*号代表默认参数
但是自己写的函数似乎不能实现这种功能,自编函数默认参数只能靠放在后面不输入参数时用默认值
有没有可能实现read和write这样的*代表默认参数值的功能呢,感觉很好玩的样子
回复

使用道具 举报

1538

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1411 元
贡献
933 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

发表于 2020-7-22 08:42:49 | 显示全部楼层
read 和 write 是语句(statement)而不是内置函数(intrinsic function)

159

帖子

14

主题

0

精华

大宗师

F 币
3906 元
贡献
767 点
 楼主| 发表于 2020-7-22 09:31:28 | 显示全部楼层
fcode 发表于 2020-7-22 08:42
read 和 write 是语句(statement)而不是内置函数(intrinsic function)

好吧,其实也知道这个区别
但是还是觉得有这种功能就好了
顺便想说下,从编译的角度,这种语句和内置函数是什么样的区别啊……

1538

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1411 元
贡献
933 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

发表于 2020-7-22 10:54:38 | 显示全部楼层
语句是语法规定的,可以不遵循函数调用的规则和形式。
内部函数虽然也是语法规定的,但遵循函数调用的规则和形式。

底层实现,应该都离不开函数。但是编译器可以根据语句的不同选择调用不同的运行时函数。

比如对于 Intel Fortran。
同样是 read 语句,如果写成 read(*,*) 编译器会调用 for_read_seq 这个运行时函数。
而写成 read(*,"(a3)") 编译器会调用 for_read_seq_fmt 这个运行时函数。
等等等等

159

帖子

14

主题

0

精华

大宗师

F 币
3906 元
贡献
767 点
 楼主| 发表于 2020-7-22 11:11:28 | 显示全部楼层
fcode 发表于 2020-7-22 10:54
语句是语法规定的,可以不遵循函数调用的规则和形式。
内部函数虽然也是语法规定的,但遵循函数调用的规则 ...

这样子,相当于编译器将read/write形式上的不同参数分流到不同的函数了
类似于通用名函数,却不是fortran语法内能实现的
好的,非常感谢站长

1538

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1411 元
贡献
933 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

发表于 2020-7-22 13:05:26 | 显示全部楼层
是的,语法层次没法实现。
(除非你自创一个 Fortran++ 语言,并书写它的编译器)
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2020-8-7 00:48

Powered by Discuz! X3.2

© 2001-2017 Comsenz Inc.

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