The ISO_C_BINDING named constants represent kind type parameters of data representations compatible with C types.
The following table shows interoperable Fortran types and C Types.
Fortran Type  | 
Named Constant for the KIND  | 
C Type  | 
|---|---|---|
INTEGER  | 
C_INT  | 
int  | 
C_SHORT  | 
short int  | 
|
C_LONG  | 
long int  | 
|
C_LONG_LONG  | 
long long int  | 
|
C_SIGNED_CHAR  | 
signed char, unsigned char  | 
|
C_SIZE_T  | 
size_t  | 
|
C_INT8_T  | 
int8_t  | 
|
C_INT16_T  | 
int16_t  | 
|
C_INT32_T  | 
int32_t  | 
|
C_INT64_T  | 
int64_t  | 
|
C_INT_LEAST8_T  | 
int_least8_t  | 
|
C_INT_LEAST16_T  | 
int_least16_t  | 
|
C_INT_LEAST32_T  | 
int_least32_t  | 
|
C_INT_LEAST64_T  | 
int_least64_t  | 
|
C_INT_FAST8_T  | 
int_fast8_t  | 
|
C_INT_FAST16_T  | 
int_fast16_t  | 
|
C_INT_FAST32_T  | 
int_fast32_t  | 
|
C_INT_FAST64_T  | 
int_fast64_t  | 
|
C_INTMAX_T  | 
intmax_t  | 
|
C_INTPTR_T  | 
intptr_t  | 
|
C_PTRDIFF_T  | 
ptrdiff_t  | 
|
REAL  | 
C_FLOAT  | 
float  | 
C_DOUBLE  | 
double  | 
|
C_LONG_DOUBLE  | 
long double  | 
|
COMPLEX  | 
C_FLOAT_COMPLEX  | 
float _Complex  | 
C_DOUBLE_COMPLEX  | 
double _Complex  | 
|
C_LONG_DOUBLE_COMPLEX  | 
long double _Complex  | 
|
LOGICAL1  | 
C_BOOL  | 
_Bool  | 
CHARACTER2  | 
C_CHAR  | 
char  | 
1 Use compiler option fpscomp logicals so that .TRUE. is 1 and .FALSE. is 0 as defined for C's _Bool. 2For character type, the length type parameter must be omitted or it must be specified by a constant expression whose value is one.  | 
||
For example, an integer type with the kind type parameter C_LONG is interoperable with the C integer type "long" or any C type derived from "long".
The value of C_INT will be a valid value for an integer kind type parameter on the processor. The values for the other integer named constants (C_INT*) will be a valid value for an integer kind type parameter on the processor, if any, or one of the following:
-1 if the C processor defines the corresponding C type and there is no interoperating Fortran processor kind
-2 if the C processor does not define the corresponding C type
The values of C_FLOAT, C_DOUBLE, and C_LONG_DOUBLE will be a valid value for a real kind type parameter on the processor, if any, or one of the following:
-1 if the C processor's type does not have a precision equal to the precision of any of the Fortran processor's real kinds
-2 if the C processor's type does not have a range equal to the range of any of the Fortran processor's real kinds
-3 if the C processor's type has neither the precision or range equal to the precision or range of any of the Fortran processor's real kinds
-4 if there is no interoperating Fortran processor or kind for other reasons
The values of C_FLOAT_COMPLEX, C_DOUBLE_COMPLEX, and C_LONG_DOUBLE_COMPLEX will be the same as those of C_FLOAT, C_DOUBLE, and C_LONG_DOUBLE, respectively.
The value of C_BOOL will be a valid value for a logical kind parameter on the processor, if any, or -1.
The value of C_CHAR is the character kind.
The following table shows interoperable named constants and C characters:
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.