Fortran Coder

查看: 4369|回复: 9
打印 上一主题 下一主题

[子程序] 调用子程序为什么每一次得出的结果都不一样呢

[复制链接]

47

帖子

15

主题

0

精华

专家

F 币
311 元
贡献
158 点
跳转到指定楼层
楼主
发表于 2022-4-3 01:02:05 | 显示全部楼层 |只看大图 回帖奖励 |倒序浏览 |阅读模式
在下面的程序当中,我使用gfortran编译器进行编译,但是为什么每次我得到的结果都不一样呢?
[Fortran] 纯文本查看 复制代码
program para
        implicit none
        real(8)::f
        call func(1.0d0,1.0d0)
        print*,f
        end program
        subroutine func(x,y)
                implicit none
                real(8),intent(in) :: x, y
                real(8) :: f
                f = 2*x+3*y
        end subroutine
~                                                                                                                                                                                    
~                               

得出的结果如下:
另外为什么我这个地方用real,intent(out)::f就会报错呢

问题.png (114.21 KB, 下载次数: 143)

问题.png
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

47

帖子

15

主题

0

精华

专家

F 币
311 元
贡献
158 点
沙发
 楼主| 发表于 2022-4-3 13:47:08 | 显示全部楼层
唐汉 发表于 2022-4-3 01:35
你在主程序里面声明了一个f,在子程序里面又声明了一个f,而且,在子程序里面的f没有输出。像这种情况你可 ...

好的,那为什么我每次执行a.out的时候输出的结果都不一致呢

47

帖子

15

主题

0

精华

专家

F 币
311 元
贡献
158 点
板凳
 楼主| 发表于 2022-4-4 15:55:21 | 显示全部楼层
布衣龙共 发表于 2022-4-3 21:24
楼主这个过程,是非常适合用函数的。
PS:任何程序,无论大小,都不推荐使用common,这东西就让它逝去吧。
...

啊哈,但是一旦我需要有三四个以上的输出结果,那这个时候就只能使用subroutine而不能使用function了呀,是这样吧

47

帖子

15

主题

0

精华

专家

F 币
311 元
贡献
158 点
地板
 楼主| 发表于 2022-4-4 16:05:30 | 显示全部楼层
布衣龙共 发表于 2022-4-3 21:24
楼主这个过程,是非常适合用函数的。
PS:任何程序,无论大小,都不推荐使用common,这东西就让它逝去吧。
...

而且我不增加输出端,而是直接对主程序当中的变量进行赋值,这样可以么
[Fortran] 纯文本查看 复制代码
program main
    use iso_fortran_env, only: real64
    implicit none
    real(real64) :: f
    call func(1._real64, 1._real64)
    print *, f
contains
    subroutine func(x, y)
        real(real64), intent(in) :: x, y
        f = 2._real64*x + 3._real64*y
    end subroutine func
end program main

这两者又有什么区别呢
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-5-17 02:39

Powered by Tencent X3.4

© 2013-2024 Tencent

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