Fortran Coder

标题: 调用子程序的返回值 [打印本页]

作者: gengyan123456    时间: 2014-7-16 11:50
标题: 调用子程序的返回值
主程序中CALL MULT22(HM1,BL77,HM7,NN,NN2,NG,2000,2000,4000) ,调用的子程序为:SUBROUTINE MULT22(X,Y,Z,N1,N2,N3,M1,M3,M5),那么调用子程序后只返回HM1,BL77,HM7,NN,NN2,NG这几个值吗?
作者: 安靖    时间: 2014-7-16 17:24
主程序中的参数也就HM1,BL77,HM7,NN,NN2,NG这几个
你觉得还要返回哪些值呢?
作者: 楚香饭    时间: 2014-7-16 18:57
虚参的数值可以改变,同时会影响实参。但通常,这种情况不叫“返回值”,以便与 function 相区别。
作者: gengyan123456    时间: 2014-7-16 19:16
chuxf 发表于 2014-7-16 18:57
虚参的数值可以改变,同时会影响实参。但通常,这种情况不叫“返回值”,以便与 function 相区别。 ...

谢谢!那你可不可以帮我看一下这个程序
SUBROUTINE MATRIX(norder)
      implicit real*8 (a-h,o-z)
      COMMON NG,NM,NM1,NNG,NN,NMS,BA,BB,NSVC,NMG,NTCSC,NMGS
      COMMON/COMC/NGIN(165),NGOUT(165),NMIN(420),NMOUT(420),NMM(420,3)
     +        /COMD/BK(420),BK1(165),BK2(165),TA(165),TB(165),NPSS(10,10)
        COMMON/PGV/PFSV(9,6),GBII(29,4),GBIJ(50,4),VGBI(28,7)
        COMMON/SVTC/KSVC(3,4),SVC(3),KTCSC(3,4),TCSC(3,2),
     1             NDSV(3,11),NDTC(3,11)
      real*8 D1(300,300),BL3(2000,3),BL7(2000,3),HL9(20000,3),
     1           DL7(6000,3),YC(2000,3),Y0(11,3)
      real*8 D2(210,210),HM1(2000,3),BL77(2000,3),HM7(4000,3)
      WRITE(3,*) NG,NM,NM1,NNG,NN,NMS,BA,BB
      OPEN(9,FILE='DVDX.DAT')
      DO 8 I=1,NM
        NMM(I,1)=0
        NMM(I,2)=0
8     CONTINUE
      Y0(1,1)=0.D0
      Y0(1,3)=0.D0
      Y0(1,2)=NNG+1
      DO 18 I=1,NNG
          NI=NN+NNG+I
          II=I*100
为什么有的参数在这里没有赋值还用了呢?如NM的值,它是主程序里的值吗?
作者: gengyan123456    时间: 2014-7-16 19:44
chuxf 发表于 2014-7-16 18:57
虚参的数值可以改变,同时会影响实参。但通常,这种情况不叫“返回值”,以便与 function 相区别。 ...

还是因为COMMON给它定义了全局变量,所以这个值继承了主程序里的值,执行完之后是变回主程序里的值,还是在主程序里用在子程序里执行后的值啊?

作者: 楚香饭    时间: 2014-7-16 20:01
程序单元之间共享数据,一般有几种方法:
1.实参虚参对应
2.common(不推荐)
3.module(推荐)
4.文件(极其大量数据)

既然你使用了实参虚参对应,就不必使用 common 了。或者你使用 common,而不要使用实参虚参对应。
作者: 楚香饭    时间: 2014-7-16 20:03
gengyan123456 发表于 2014-7-16 19:16
谢谢!那你可不可以帮我看一下这个程序
SUBROUTINE MATRIX(norder)
      implicit real*8 (a-h,o-z)

NM 是通过 common 获得的,不一定在主程序里,只要使用了common的程序单元,都存在。(相同的拷贝)
作者: gengyan123456    时间: 2014-7-16 20:36
chuxf 发表于 2014-7-16 20:03
NM 是通过 common 获得的,不一定在主程序里,只要使用了common的程序单元,都存在。(相同的拷贝) ...

哦,明白了,我是一个初学者,以后还请大神多多指点,谢谢了




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2