call to revolt
Tim McDaniel
mcdaniel at adi.com
Fri Jun 28 01:07:01 AEST 1991
Oh, dear. I had thought this horse had fossilized by now.
In article <4880 at inews.intel.com> bhoughto at bishop.intel.com (Blair P.
Houghton) writes:
This'll do it, too:
thing += (int *)1;
(see ANSI X3.159-1989, sec. 3.3.16.2, p. 55, ll. 20-21, and
footnote 51 at the bottom of p. 51, for proof...)
In the ANSI-published version, footnote 51 is at the bottom of page
54, and deals with "the asymmetric appearance of these constraints
with respect to type qualifiers" in simple assignment, which means
"=". It is therefore entirely irrelevant. Page 51 has no footnotes.
Perhaps footnote 46 on page 48 was meant? It deals with pointer
arithmetic, but is careful to specify "*integral* expression added to
or subtracted from the converted pointer" (emphasis mine).
The above-referenced p. 55, ll. 20-21 does say, under "Semantics" of
"Compound Assignment":
A *compound* *assignment* of the form E1 *op*= E2 differs from the
simple assignment expression E1 = E1 *op* (E2) only in that the
lvalue E1 is evaluated only once.
However, the "Constraints" six lines up read:
For the operators += and -= only, either the left operand shall be
a pointer to an object type and the right shall have integral type,
or the left operand shall have qualified or unqualified arithmetic
type and the right shall have arithmetic type.
"(int *) 1" does not have integral type; it has pointer type. Pointer
types and integral types are clearly distinguished in section 3.1.2.5,
"Types".
Section 3.3.6, "Additive Operators" (p. 47), (which applies due to the
"Semantics" section quoted above) has the constraint
For addition, either both operand shall have arithmetic type, or
one operand shall be a pointer to an object type and the other
shall have integral type.
In section 3.3.4, "Cast Operators", in "Semantics",
An arbitrary integer may be converted to a pointer. The result is
implementation-defined. \footnote{45. The mapping functions for
converting a pointer to an integer or an integer to a pointer are
intended to be consistent with the addressing structure of the
execution environment.}
In short: bullshit.
--Tim
"More accurately, it's fossilized
horseshit."
--
"Of course he has a knife; he always has a knife. We all have knives.
It's 1183 and we're barbarians." -- Eleanor of Aquitaine, "A Lion in Winter"
Tim McDaniel Applied Dynamics Int'l.; Ann Arbor, Michigan, USA
Internet: mcdaniel at adi.com UUCP: {uunet,sharkey}!amara!mcdaniel
More information about the Comp.std.c
mailing list