Fortran Coder

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

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

[复制链接]

19

帖子

0

主题

0

精华

专家

F 币
370 元
贡献
122 点
楼主
发表于 2022-4-3 01:35:53 | 显示全部楼层
你在主程序里面声明了一个f,在子程序里面又声明了一个f,而且,在子程序里面的f没有输出。像这种情况你可以直接用function,或者subroutine但是加上输出intent(out)
[Fortran] 纯文本查看 复制代码
program main

    use iso_fortran_env, only: real64
    implicit none

    real(real64) :: f
    call func(1._real64, 1._real64, f)
    print *, f

contains

    subroutine func(x, y, ret)
        real(real64), intent(in) :: x, y
        real(real64), intent(out) :: ret

        ret = 2._real64*x + 3._real64*y
    end subroutine func

end program main

19

帖子

0

主题

0

精华

专家

F 币
370 元
贡献
122 点
沙发
发表于 2022-4-5 02:04:25 | 显示全部楼层
sqs 发表于 2022-4-4 16:05
而且我不增加输出端,而是直接对主程序当中的变量进行赋值,这样可以么[mw_shl_code=fortran,true]progra ...

这样做是可以的,那是因为contains之后的所有子程序依然在一个“scope”里面。你在一个子程序里面也可以用contains来包含一个或多个子程序,他们也会分享上一层子程序的中的变量。但是我不太建议这么做。这样非常容易混淆。当你的程序越写越长了,我还是建议用module把这些都分开。

评分

参与人数 1F 币 +3 收起 理由
fcode + 3 说得对

查看全部评分

您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-5-16 19:10

Powered by Tencent X3.4

© 2013-2024 Tencent

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