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"