子程序之间的变量传递
小弟遇到了一个在各子程序单元之间爱你变量传递的问题,就是在几个子程序中都会调用一些相同的变量,怎么把这些变量设为一个“公共变量”(不知道能不能叫全局变量,因为在主程序中没有用到),能用COMMON实现吗?多谢指教!!! 用module,比如
module par
integer :: i_a
real(8) :: r_a
end module par
然后在几个值程序中用
use par 原帖由 lishhit 于 2008-2-23 11:48 发表 http://www.simwe.com/forum/images/common/back.gif
用module,比如
module par
integer :: i_a
real(8) :: r_a
end module par
然后在几个值程序中用
use par
我也遇到了同样的问题,
请问这一段程序应该放在子程序的哪个位置? function ABC(a1, a2) result(a3)
use par ! ------------------------------------------ here
real(8), intent(in):: a1, a2
real(8) :: a3
a3 = r_a**2
end function ABC
[ 本帖最后由 lishhit 于 2008-2-26 18:23 编辑 ] 请教:
我现在编译两个子程序,第一个是与一个商用软件的接口程序,程序头是固定格式,不能更改:第二个子程序需要用到第一个子程序的数据来计算一个值;然后需要再将这个值返回到第一个子程序里面。请问用module可以实现吗?如果可以,请指教。多谢多谢!现在非常着急解决这个问题 没明白你要干什么,听你的意思=》那你直接在第一个子程序中调用第二个此程序不行吗?为什么还要用module呢?你的问题和gtddy的不一样,他可能是不想函数输入输出参数太多才想到用module。 可以在第一个子程序里面调用第二个子程序;可是我两个子程序都要用到第一个子程序里的一个值,而且第二个子程序不能调用第一个子程序。
我的qq是:156838773,如果方便能联系我吗?真的很着急。多谢了! 最笨的办法就是把第一子程序里的值写到某文件,然后第二个子程序读取文件,这样可以满足要求吗? 多谢lishihit兄的指点!自己后看了看书也搞明白了。感觉好像COMMON和module的是用法一样吗?
对于glldd的问题:“第一个是与一个商用软件的接口程序,程序头是固定格式,不能更改”,那不知道你要传递值得变量,是不是第一个子程序中的哑元变量?如果不是的话,应该也可以用COMMON来实现的吧。应该来说用哑实结合的方法传递数值肯定是可以的。
例如
subroutine A(a1,a2,a3...)
real(8):: a1, a2
real(8):: aa1, aa2
COMMON /cc/ aa1,aa2
...
end
subroutine B(b1,b1,b3...)
real(8):: b1,b2
real(8):: bb1,bb2
COMMON /cc/ bb1,bb2
...
end
这样两个子程序中的公共数据块cc就可以共享数据了。A中的aa1和B中的bb1是一样的。
但是a1..a3如果是要和商业软件接口,可能就不能把它定义成COMMON了,因为它是在主程序中定义好了的。。
感谢大家的讨论!
页:
[1]