【发布时间】:2015-09-30 17:01:53
【问题描述】:
subroutine func01( a ) bind(C,name="func01")
implicit none
character(len=30), dimension(3) , intent(in) :: a
print *
print *, "char length = ", len(a(1)), len(a(2)), len(a(3))
print *, "raw a(1) : [", a(1), "]"
print *, "raw a(2) : [", a(2), "]"
print *, "raw a(3) : [", a(3), "]"
print *, "trim : [", trim(a(1)), "] [", trim(a(2)), "] [", trim(a(3)), "]"
end
当我尝试编译上述代码时,我收到以下消息:
gfortran source3.f90
source3.f90:1.20:
subroutine func01( a ) bind(C,name="func01")
1
Warning: Variable 'a' at (1) is a parameter to the BIND(C) procedure 'func01' bu
t may not be C interoperable
source3.f90:1.20:
subroutine func01( a ) bind(C,name="func01")
1
Error: Character argument 'a' at (1) must be length 1 because procedure 'func01'
is BIND(C)
你能告诉我如何摆脱这些消息吗?
【问题讨论】:
-
正如您在 stackoverflow.com/tags/fortran-iso-c-binding/info 中看到的那样,
a不是可互操作的东西(它的长度不是 1).. 您将能够找到许多其他关于从C 到 Fortran。 -
用 ifort intel 编译器编译就好了
-
是的,英特尔允许这样做,但这是他们的非标准选择。
-
如何修复它以使用 gfortran 运行
-
您将不得不对其进行重组以使用 character(1) 数组。我们不能说更多,因为我们看不到其余的代码,但必须对其进行重组,而不仅仅是更改一行。
标签: fortran gfortran fortran-iso-c-binding