В 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(*)). Временный массив может быть создан компилятором, чтобы иметь возможность сделать это, если массив не является смежным.

Другие вопросы по тегам