В Fortran2003 1D-Предполагаемый массив формы взаимодействует с C?
В Fortran 2003, выделяемый массив не взаимодействует с C. Я предполагаю, что это как-то связано с дополнительной информацией о массиве, хранящейся в памяти, что может нарушить интерпретацию языка C.
Но что, если я объявляю фиктивный аргумент как массив 1D предполагаемой формы? например
subroutine outter_subroutine(ma, size_ma)
integer :: size_ma
integer :: ma(size_ma)
call fortran_subroutine(ma)
end subroutine
!-----------------------------
subroutine fortran_subroutine(a)
integer, intent(in) :: a(:)
integer,(kind=c_int):: ierr
...
ierr = some_c_function(a)
...
end subroutine
Интерфейс в фортране может понравиться
interface
function some_c_function(a)
integer(c_int) :: a(*)
end interface
в то время как в C, прототип может быть
int some_c_function(int *a)
Будет ли это соответствовать стандарту Fortran 2003?
1 ответ
Совместимые подпрограммы C не могут иметь предполагаемые аргументы формы, но вы можете передать предполагаемый массив формы (или любой другой) в совместимую подпрограмму, которая имеет аргумент предполагаемого размера (a(*)). Временный массив может быть создан компилятором, чтобы иметь возможность сделать это, если массив не является смежным.