1

In Fortran 2003 ist das zuweisbare Array nicht interoperabel mit C. Ich nehme an, dies hat etwas mit zusätzlichen Array-Informationen im Speicher zu speichern, die die C-Interpretation stören könnten.In Fortran2003, ist 1D angenommen Form-Array interoperabel mit C?

Aber was ist, wenn ich ein Dummy-Argument als 1D vermutete Form Array deklariere? vielleicht zum Beispiel

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 

Die Schnittstelle in Fortran kann

interface 
function some_c_function(a) 
integer(c_int) :: a(*) 
end interface 

während in C mögen, den Prototyp

int some_c_function(int *a) 

Will, der die Fortran 2003-Standard entsprechen?

Antwort

2

C interoperable Subroutinen können keine Shape-Argumente annehmen, aber Sie können ein angenommenes Shape-Array (oder ein anderes) an eine interoperable Subroutine übergeben, die ein angenommenes Größenargument (a (*)) hat. Ein temporäres Array muss möglicherweise vom Compiler erstellt werden, um dies durchführen zu können, wenn das Array nicht zusammenhängend ist.

+0

Also, heißt das, wenn ich das Dummy-Argument mit ** vermuteter Größe ** in einer Bind (c) -Schnittstelle deklariere, kann ich alle Arten von 1D-Array hineingeben, und der Compiler kümmert sich um den Rest Sache? – Francium

+0

Ja, das stimmt. Aber manchmal muss eine temporäre gemacht werden. –