Defect Report #171
Submission Date: 16 Oct 95
Submittor: BSI
Source: Clive D.W. Feather
Question
Submitted to BSI by Clive D.W. Feather [email protected] .
In this Defect Report, identifiers lexically identical to those
declared in standard headers refer to the identifiers declared in those
standard headers, whether or not the header is explicitly mentioned.
This Defect Report has been prepared with considerable help from
Mark Brader, Jutta Degener, Ronald Guilmette, and a person whose
employment conditions require anonymity. However, except where stated,
opinions expressed or implied should not be assumed to be those of any
person other than myself.
Defect Report UK 019: Ranges of integral types
It appears to be possible to create implementations with
unreasonable arrangements of integral types.
Subclause 6.1.2.5 states various rules which allow the following
deductions to be made:
SCHAR_MAX = SHRT_MAX
SHRT_MAX = INT_MAX
INT_MAX =
LONG_MAX
SCHAR_MIN = SHRT_MIN
SHRT_MIN = INT_MIN
INT_MIN = LONG_MIN
SCHAR_MAX = UCHAR_MAX
SHRT_MAX =
USHRT_MAX
INT_MAX = UINT_MAX
LONG_MAX = ULONG_MAX
and, depending on the interpretation of the term the same
amount of storage:
sizeof (unsigned short) == sizeof (short)
sizeof (unsigned
int) == sizeof (int)
sizeof (unsigned long) == sizeof (long)
However, (based on the preliminary discussions of Defect
Report #069, which allow padding bits in integral types) there does not
appear to be any requirement for the following:
UCHAR_MAX = USHRT_MAX
USHRT_MAX = UINT_MAX
UINT_MAX =
ULONG_MAX
sizeof (short) = sizeof (int)
sizeof (int) =
sizeof (long)
UCHAR_MAX = INT_MAX
The first five of these are necessary to allow reasonable
deductions to be made about the behavior of types in the presence of
padding bits (for example, that unsigned long can hold any value
representable in any integral type). The sixth is necessary to allow
the <ctype.h> functions to behave sensibly (it is also
assumed by example 2 of subclause 5.1.2.3).
Suggested Technical Corrigendum
In subclause 6.1.2.5, change in the fourth paragraph:
In the list of signed integer types above, the range of values of
each type is a subrange of the values of the next type in the list
.
to:
In the list of signed integer types above, the range of values of
each type is a subrange of the values of the next type in the list, and
the size of an object of each type is not greater than the size of an
object of the next type in the list.
Add to the fifth paragraph:
The range of values of each unsigned integer type is a subrange
of the next type (in the list unsigned char, unsigned
short,
unsigned int, unsigned long).
Add to the fifth or eighth paragraph:
The range of values of the type unsigned char is
a subrange of the values of the type int.
Response
This is a work in progress item.
Summary: Explicit statements are not made about ranges for all
types. It can be argued that you can derive this information from the C
Standard.
Does the Commitee want to make explicit statements about all
relationships, specifically the unsigned types?
Previous Defect Report
< - >
Next Defect Report