The ISO_C_BINDING module provides access to named constants that represent kind type parameters of data representations compatible with C types, the derived type C_PTR corresponding to any C data pointer type, the derived type C_FUNPTR corresponding to any C function pointer type, and four procedures.
Table 32 shows the interoperability between Fortran intrinsic types and C types. A Fortran intrinsic type with particular kind type parameter values is interoperable with a C type if the type and kind type parameter value are listed in the same row as that C type; if the type is character, interoperability also requires that the length type parameter be omitted or be specified by an initialization expression whose value is one. A combination of Fortran type and type parameters that is interoperable with a C type listed in the table is also interoperable with any unqualified C type that is compatible with the listed C type.
Fortran Type |
Named Constant (kind type parameter) |
Value | C Type |
---|---|---|---|
INTEGER | C_SIGNED_CHAR | 1 | signed char |
C_SHORT | 2 | short | |
C_INT | 4 | int | |
C_LONG |
4 (with -q32) 8 (with -q64) |
long | |
C_LONG_LONG | 8 | long long | |
C_SIZE_T |
4 (with -q32) 8 (with -q64) |
size_t | |
C_INTPTR_T |
4 (with -q32) 8 (with -q64) |
intptr_t | |
C_INTMAX_T | 8 | intmax_t | |
C_INT8_T | 1 | int8_t | |
C_INT16_T | 2 | int16_t | |
C_INT32_T | 4 | int32_t | |
C_INT64_T | 8 | int64_t | |
C_INT_LEAST8_T | 1 | int_least8_t | |
C_INT_LEAST16_T | 2 | int_least16_t | |
C_INT_LEAST32_T | 4 | int_least32_t | |
C_INT_LEAST64_T | 8 | int_least64_t | |
C_INT_FAST8_T | 1 | int_fast8_t | |
C_INT_FAST16_T | 4 | int_fast16_t | |
C_INT_FAST32_T | 4 | int_fast32_t | |
C_INT_FAST64_T | 8 | int_fast64_t | |
REAL | C_FLOAT | 4 | float |
C_DOUBLE | 8 | double | |
C_LONG_DOUBLE | 16 | long double | |
C_FLOAT_COMPLEX | 4 | float _Complex | |
C_DOUBLE_COMPLEX | 8 | double _Complex | |
C_LONG_DOUBLE_COMPLEX | 16 | long double _Complex | |
LOGICAL | C_BOOL | 1 | _Bool |
CHARACTER | C_CHAR | 1 | char |
For example, the type integer with a kind type parameter of C_SHORT is interoperable with the C type short or any C type derived (via typedef) from short.
The following character constants are provided for compatibility with some commonly used C characters that are represented using escape sequences:
Fortran Named Constant | Definition | C Character | |
---|---|---|---|
C_NULL_CHAR | null character | '\0' | |
C_ALERT | alert | '\a' | |
C_BACKSPACE | backspace | '\b' | |
C_FORM_FEED | form feed | '\f' | |
C_NEW_LINE | new line | '\n' | |
C_CARRIAGE_RETURN | carriage return | '\r' | |
C_HORIZONTAL_TAB | horizontal tab | '\t' | |
C_VERTICAL_TAB | vertical tab | '\v' |
The constant C_NULL_PTR is of type C_PTR; it has the value of a C null data pointer. The constant C_NULL_FUNPTR is of type C_FUNPTR; it has the value of a C null function pointer.
The type C_PTR is interoperable with any C data pointer type. The type C_FUNPTR is interoperable with any C function pointer type. They are both derived types with private components.
A C procedure argument is often defined in terms of a C address. The ISO_C_BINDING module provides the following procedures. The C_ASSOCIATED function is provided so that Fortran programs can compare C addresses. The C_F_POINTER subroutine provides a means of associating a Fortran pointer with the target of a C pointer. The C_FUNLOC and C_LOC functions are provided so that Fortran applications can determine the appropriate value to use with C facilities.
Indicates the association status of C_PTR_1, or whether C_PTR_1 and C_ PTR_2 are associated with the same entity.
Inquiry function
Default logical
Associates a data pointer with the target of a C pointer and specifies its shape.
Subroutine
If the value of CPTR is the C address of an interoperable data entity, then:
Otherwise, the value of CPTR will be the result of a reference to C_LOC with a noninteroperable argument X. X (or its target) cannot have been deallocated or have become undefined due to the execution of a RETURN or END statement since the reference to C_LOC. FPTR is a nonpolymorphic, scalar pointer with the same type and type parameters as X. It becomes pointer-associated with X (or its target if X is a pointer).
Returns the C address of a function pointer.
Inquiry function
Scalar of type C_FUNPTR
A value of type C_FUNPTR that represents the C address of the argument.
Returns the C address of the argument.
Inquiry function
Scalar of type C_PTR
A value of type C_PTR that represents the C address of the argument.