J3/99-211r1
Date: 23 Aug 99
To: J3
From: /Interop
Subject: When C_FLOAT etc are Invalid
References: Chapter 16, Section 16.1, 4th Para
"The values of C_FLOAT, C_DOUBLE, and C_LONG_DOUBLE shall each be a
valid value for a real kind type parameter on the processor or shall
be -1. The values of C_COMPLEX, C_DOUBLE_COMPLEX, and
C_LONG_DOUBLE_COMPLEX shall be the same as those of C_FLOAT,
C_DOUBLE, and C_LONG_DOUBLE, respectively."
It seems that the values of C_FLOAT, C_DOUBLE, and C_LONG_DOUBLE
are another way of getting a kind value to a real variable,
analogous to SELECTED_REAL_KIND(). Why do C_FLOAT, C_DOUBLE,
and C_LONG_DOUBLE provide less information than SELECTED_REAL_KIND()
in the case where there is no such kind? C_FLOAT, C_DOUBLE, and
C_LONG_DOUBLE could be the value which would be returned by
SELECTED_REAL_KIND() were it called with P= and/or R= for the
corresponding C type.
EDIT:
[403:26] Change "or shall be -1."
to "or shall be -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 nor range of any of the Fortran processor's
real kinds, and equal to -4 if there is no interoperating
Fortran processor kind for other reasons."
Following that paragraph add this paragraph
"Note: If the C processor supports more than one variety of float,
double or long double, the Fortran processor may find it helpful
to select from among more than one ISO_C module by a processor
dependent means.
End Note"