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
Когда я пытаюсь скомпилировать код выше, я получаю следующие сообщения:Ошибка: Характер аргумент «а» в (1) должен быть длиной 1, так как процедура BIND (C)
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)
Может скажите, пожалуйста, как избавиться от сообщений?
Как вы можете видеть в http://stackoverflow.com/tags/fortran-iso-c-binding/info 'a' не является совместимой вещью (это не длина 1) .. Вы будете в состоянии найти много других вопросов о передаче строки из C в Fortran. – francescalus
Он отлично компилируется с помощью компилятора ifort intel – bjdesa
Да, Intel позволяет это, но это их нестандартный выбор. –