RE: [cc65] structure bug?

Date view Thread view Subject view

From: Mike McCarty (jmccarty_at_ssd.usa.alcatel.com)
Date: 2001-05-25 15:21:49


On Fri, 25 May 2001, Mark Keates wrote:

> Hi,
> 
> > In addition, ANSI disallows calculating pointers that 
> > point outside of objects, so your code is not standard 
> > compliant anyway.
> 
> True, just me being lazy I guess, I have a multi segment

[snip]

Not completely true. ANSI allows calculating pointers which point one
element past the end of an array.

I quote the Standard

        6.3.6 Additive operators

        ...

        Moreover, if the expression P points to the last element of an
        array object, the expression (P)+1 points one past the last
        element of the array object, and if the expression Q points one
        past the last element of an array object, the expression (Q)-1
        points to the last element of the object.

        ...

        [When subtracting one pointer from another] Unless both
        pointers point to elements of the same array object, or one
        past the last element of the array object, the behavior is
        undefined. [footnote 46: Another way to approach pointer
        arithmetic is first to convert the pointer(s) to character
        pointer(s): In this scheme the integral expression added to or
        subtracted from the converted pointer is first multiplied by
        the size of the object originally pointed to, and the resulting
        pointer is converted back to the original type. For pointer
        subtraction, the result of the difference between the original
        character pointers is similarly divided by the size of the
        object originally pointed to.

        When viewed in this way, an implementation need only provide
        one extra byte (which may overlap another object in the
        program) just after the end of the object in order to satisfy
        the "one past the last element" requirements.]

Similar language occurs multiple times in the Standard.

I realize that this may not apply in your circumstance (for some
reason, this is the first message on this topic I have seen, others did
not reach me), but it is important for understanding how the language
works.

Mike

----------------------------------------------------------------------
To unsubscribe from the list send mail to majordomo_at_musoftware.de with
the string "unsubscribe cc65" in the body(!) of the mail.


Date view Thread view Subject view

This archive was generated by hypermail 2.1.3 : 2001-12-14 22:05:40 CET