correct code for pointer subtraction
Mark Brader
msb at sq.uucp
Tue Jan 10 09:38:44 AEST 1989
Someone says:
Of the code:
static int a[30000];
printf("%d\n",&a[30000]-a);
Someone says:
> > I have been told that dpANS explicitly states that the address of
> > "one-after-last" element of an array may be taken, and subtractions
> > like the above are legal and should give correct result.
And Doug Gwyn says:
> Almost. ... the result is of type ptrdiff_t (defined in <stddef.h>).
> The example above assumes that ptrdiff_t is int ...
Right so far. But in addition, it's possible for a valid expression to
result in an overflow. This is not a problem in the particular example
since 30000 can't overflow an int, but it's permissible for subscripts to
run higher than the maximum value that ptrdiff_t can contain. In that
case, the analogous subtraction "like the above" would not work.
Section 3.3.6 in the October dpANS says:
# As with any other arithmetic overflow, if the result does not fit in
# the space provided, the behavior is undefined.
Mark Brader, SoftQuad Inc., Toronto, utzoo!sq!msb, msb at sq.com
A standard is established on sure bases, not capriciously but with
the surety of something intentional and of a logic controlled by
analysis and experiment. ... A standard is necessary for order
in human effort. -- Le Corbusier
More information about the Comp.lang.c
mailing list