gpt4 book ai didi

fortran - 从外部检查子程序中局部变量的值

转载 作者:行者123 更新时间:2023-12-02 21:06:49 26 4
gpt4 key购买 nike

如何像在 Matlab 中一样检查 Fortran 中的值?比如下面这个小程序,为什么子程序testing中显示的是c=36,而main中却显示c=0?如何在主程序中将其设置为c=36

你能以某种方式调用值c吗?我知道在主程序中变量c要么未定义,要么值为0,但是有没有办法保存c的值在子例程中,以便您可以在其他子例程中再次使用它,而无需再次计算?

当程序相当大时,可以方便地随时检查值。

program main

use test

implicit none

integer :: a,b,c

call testing(a,b)

write(*,*)'Test of c in main program',c


end program main



module test

implicit none


contains


subroutine testing(a,b)

integer :: a,b,c

a=2
b=3

c=(a*b)**a

write(*,*)'Value of c in subroutine',c

end subroutine testing

end module test

最佳答案

了解 scope 很重要在编程语言中。

每个名称(标识符)的有效期都是有限的。

如果在子例程中声明某个变量

subroutine s
integer :: i
end subroutine

i 仅在该子例程中有效。

如果在模块中声明变量

module m
integer :: i
contains
subroutines and functions
end module

那么i在所有这些子例程和函数以及使用该模块的所有程序单元中都有效。

但是,这并不意味着您应该在模块中声明变量并共享它。这或多或少是一个 global variable 。这只保留用于某些必要的情况,但不用于从子程序中获取结果。

如果您的子例程只是计算某些内容并且您想获得该计算的结果,那么您有两种可能性:

1.将其作为附加参数传递,该参数将由子例程定义

subroutine testing(a, b, c)
integer, intent(in) :: a, b
integer, intent(out) :: c

c = (a*b) ** a
end subroutine

然后你将其称为

call testing(2, 3, c)
print *, "result is:" c

2.使其成为一个函数

function testing(a, b) result(c)
integer, intent(in) :: a, b
integer :: c

c = (a*b) ** a
end function

然后就可以直接使用了

c = testing(2, 3)
print *, "result is:", c

或者只是

print *, "result is:", testing(2, 3)

关于fortran - 从外部检查子程序中局部变量的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35672301/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com