错误:'(1)中'c_f_pointer'内在的'shape'参数必须是等级1 fortran C混合编程

时间:2016-11-30 22:55:48

标签: c fortran

我对整个混合fortran C编程都很陌生。试图编译this page中提到的例子,但我得到一些我不明白的错误。 C部分正确编译,所以我把fortran代码放在​​这里:

MODULE type_mod

  USE iso_c_binding

  TYPE, bind(c) :: type2_t
  INTEGER(c_int) :: idx, size
END TYPE type2_t

TYPE, bind(c) :: type3_t
INTEGER(c_int) :: idx, size
END TYPE type3_t

TYPE, bind(c) :: type1_t
TYPE(type2_t) :: params
TYPE(c_ptr) :: status
INTEGER(c_int) :: idx
END TYPE type1_t

END MODULE type_mod

PROGRAM test_f_to_c

  USE iso_c_binding
  USE type_mod

  INTERFACE
     SUBROUTINE init_data(A,N) bind(c)
   USE iso_c_binding
   USE type_mod
   TYPE(type1_t) :: A
   INTEGER(c_int), value :: N
     END SUBROUTINE init_data
  END INTERFACE

  INTEGER, value :: N
  PARAMETER(N=10)
  TYPE(type1_t) :: A
  INTEGER :: i
  TYPE(type3_t), DIMENSION(:), POINTER :: status

  CALL init_data(A,N)

  PRINT *, A%idx, A%params%idx, A%params%size
  CALL c_f_pointer(A%status,status,[N])
  DO i=1,N
     PRINT *, i, status(i)%idx, status(i)%size
  ENDDO

END PROGRAM test_f_to_c 

我用

编译它
gfortran -c foo.f90

我得到的错误:

test13F.f90:35:33:
 CALL c_f_pointer(A%status,status,N)
                                 1
Error: 'shape' argument of 'c_f_pointer' intrinsic at (1) must be of rank 1

如果您能帮助我理解为什么我会收到此错误,我将如何解决,如果有其他示例请提供链接,我将不胜感激。

P.S。对不起,如果代码的缩进是杂乱的。我希望stackoverflow有一个适当的工具来复制和粘贴代码,这样就不会弄乱像这样的缩进!

edit1:根据评论我修复了代码,现在应该可以了。

0 个答案:

没有答案