C++和fortran混合编程中,对于fortran程序中的assumed array,当数组为多维数组时,
c++向fortran传递的数组在fortran中无法确定维数,运行时导致错误。
解决方法:
假设c程序p41c.cpp调用fortran子程序formnf.f95:
SUBROUTINE formnf(nf)
IMPLICIT NONE
INTEGER,INTENT(IN OUT)::nf(:,:)
INTEGER::i,j,m
m=0
DO j=1,UBOUND(nf,2)
DO i=1,UBOUND(nf,1)
IF(nf(i,j)/=0)THEN
m=m+1
nf(i,j)=m
write(*,*) nf(i,j)
END IF
END DO
END DO
RETURN
END SUBROUTINE formnf
为了能向formnf正确传递数组,设计一接口ciformnf.f95:
SUBROUTINE ciformnf(nf,m,k)
IMPLICIT NONE
integer m,k
INTEGER,INTENT(IN OUT)::nf(m,k)
! INTEGER,ALLOCATABLE::nf(:,:)
! ALLOCATE(nf(m,k))
call formnf(nf)
RETURN
contains
SUBROUTINE formnf(nf)
IMPLICIT NONE
!INTEGER,INTENT(IN OUT)::nf(m1,k1)
!integer m1,k1 !czz
INTEGER,INTENT(IN OUT)::nf(:,:)
INTEGER::i,j,m
m=0
DO j=1,UBOUND(nf,2)
DO i=1,UBOUND(nf,1)
IF(nf(i,j)/=0)THEN
m=m+1
nf(i,j)=m
write(*,*) nf(i,j)
END IF
END DO
END DO
RETURN
END SUBROUTINE formnf
END SUBROUTINE ciformnf
这样就可以通过ciformnf调用formnf.实现c向fortran的assumed array传递数据的目的。