7.1 Interoperability with C
• Intrinsic Types: | ||
• Derived Types and struct: | ||
• Interoperable Global Variables: | ||
• Interoperable Subroutines and Functions: | ||
• Working with Pointers: | ||
• Further Interoperability of Fortran with C: |
Since Fortran 2003 (ISO/IEC 1539-1:2004(E)) there is a
standardized way to generate procedure and derived-type
declarations and global variables which are interoperable with C
(ISO/IEC 9899:1999). The bind(C)
attribute has been added
to inform the compiler that a symbol shall be interoperable with C;
also, some constraints are added. Note, however, that not
all C features have a Fortran equivalent or vice versa. For instance,
neither C’s unsigned integers nor C’s functions with variable number
of arguments have an equivalent in Fortran.
Note that array dimensions are reversely ordered in C and that arrays in
C always start with index 0 while in Fortran they start by default with
1. Thus, an array declaration A(n,m)
in Fortran matches
A[m][n]
in C and accessing the element A(i,j)
matches
A[j-1][i-1]
. The element following A(i,j)
(C: A[j-1][i-1]
;
assuming i < n) in memory is A(i+1,j)
(C: A[j-1][i]
).