В Fortran 2003 распределяемый массив равен , а не, совместимый с C. Я полагаю, что это имеет какое-то отношение к дополнительной информации о массиве, хранящейся в памяти, которая может нарушить интерпретацию C.В Fortran2003, 1D Предполагаемая матрица форм, совместимая с 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?
Итак, это означает, что если я объявляю фиктивный аргумент с ** предполагаемым размером ** в интерфейсе bind (c), я могу передать в него все виды массива 1D, а компилятор позаботится об остальном? – Francium
Да, это правда. Но иногда нужно сделать временное. –