Defect Report #121
Submission Date: 03 Dec 93
Source: Ron Guilmette
ANSI/ISO C Defect Report #rfg28:
Subject: Conversions of pointer values to integral types.
Subclause 6.3.4 (Semantics):
A pointer may be converted to an integral type. The size of
integer required and the result are implementation-defined. If
the space provided is not long enough, the behavior is undefined.
This passage is worded rather ambiguously.
In the first place, it talks about ``The size of the integer required....''
Required by whom? Required by what? I can't tell.
Also, I get the feeling that the way this passage reads, an implementation
might permit conversions of pointers to types char, short,
and int (with implementation defined semantics) while disallowing
conversions of pointers to type long! (Of course that would
be highly counterintuitive.)
Here is a suggested replacement for the above passage:
The value of any pointer expression whose sizeof, if computed,
would be N, may be converted (via a cast) to any integral type whose
sizeof is N or greater.
The values resulting from such conversions
If an attempt is made to convert (via a cast) the value of a pointer
expression whose sizeof, if computed, would be N,
to some integral type whose sizeof
is less than N, the behavior is undefined.
This is simply a more precise (and accurate) way of saying exactly
what was (obviously) intended.
The ``size required'' is that required by the implementation.
The words ``If the space provided is not long enough''
make it clear that
it is the size of the type that is relevant, and means that any type
that is at least as long as the type of the
``size required'' is also acceptable.
The size required need not be related to the result of
sizeof applied to the expression.
Previous Defect Report
< - >
Next Defect Report