SUBROUTINE OTA(A, B, C, D, E, F, GGGG, TTTT)
DIMENSION GGGG(*), TTTT(*)
。。。。
END
subroutine caller(A, B, C, D, E, F, GGGG, TTTT,....)
integer A,...
REAL B(A)...
integer GGGG(2*A+B)
I1=2*B+1
call OTA(A, B, C, D, E, F, GGGG, TTTT(I1))end
fcode 发表于 2016-9-7 20:38
这些老语法就是非常容易出错的。
对于虚参来说 DIMENSION GGGG(*), TTTT(*) 这种叫做 “假定大小”,是非 ...
program a
implicit none
integer :: work(5) = 3
call b(work)
end program a
Subroutine b( GGGG )
implicit none
integer,dimension(*) :: GGGG
call c(GGGG)
End Subroutine b
Subroutine c(xxxx)
implicit none
integer xxxx(5,1)
write(*,*) xxxx
End Subroutine c
1.jpg (7.19 KB, 下载次数: 412)
2.jpg (5.76 KB, 下载次数: 450)
fcode 发表于 2016-9-8 11:36
再强调一次,不要用假定大小!建议改为自动数组,或假定形状。
如果你确实要用,那么我用下面的代码做了测 ...
program a
implicit none
integer :: work(5) = 3
call b(work)
end program a
Subroutine b( GGGG )
implicit none
integer,dimension(*) :: GGGG
integer I
I=3
call c(GGGG,GGGG(I))
End Subroutine b
Subroutine c(xxxx,iyyyy)
implicit none
!!!以下已经转换成f90
real xxxx(5,1)
integer yyyy(5,1)
!!原来77的代码如下
!real xxxx
!dimension xxxx(5,1)
!dimension iyyyy(5,1) 因为没有implicit none,按IN规则处理
write(*,*) xxxx
End Subroutine c
111.png (25.67 KB, 下载次数: 468)
heroinhell 发表于 2016-9-8 15:18
[mw_shl_code=fortran,true]program a
implicit none
integer :: work(5) = 3
fcode 发表于 2016-9-8 16:31
实际上,不管在 Fortran77 还是 Fortran90,这样写都是不符合语法规范的。
(你以前用的什么编译器?可能是 ...
pasuka 发表于 2016-9-8 22:11
这种黑魔法无论新手还是老鸟都是焦油坑,保准坑人不浅
fcode 发表于 2016-9-8 16:31
实际上,不管在 Fortran77 还是 Fortran90,这样写都是不符合语法规范的。
(你以前用的什么编译器?可能是 ...
欢迎光临 Fortran Coder (http://bbs.fcode.cn/) | Powered by Discuz! X3.2 |