Subject: Re: __UNCONST(a)
To: der Mouse <mouse@Rodents.Montreal.QC.CA>
From: Greg A. Woods <woods@weird.com>
List: tech-userlevel
Date: 07/05/2004 19:25:09
[ On Thursday, July 1, 2004 at 21:41:52 (-0400), der Mouse wrote: ]
> Subject: Re: __UNCONST(a)
>
> >>> When subtracting pointers they both have to point into the same
> >>> array.
> >> Isn't it into the same _object_?
> > How can a NULL pointer ever point to the same storage object as any
> > other non-NULL pointer?
> 
> _Into_, not _to_.

Same difference (at least for NULL).  ;-)

By definition a null pointer in C points nowhere -- it explicitly points
(in)to no object or function, or in the language of C9x (at least of the
ISO 9899 JTC1/SC22/WG14/N869 committee draft from Jan 18, 1999):

§ 6.3.2.3 ¶3

  An integer constant expression with the value 0, or suah an expression
  cast to type "void *", is called a "null pointer constant."  If a null
  pointer constant is converted to a pointer type, the resulting
  pointer, called a null pointer, is guaranteed to compare unequal to a
  pointer to any object or function.

As far as I can tell there's no one statement in the standard to the
effect that "pointer arithmetic with the NULL pointer is invalid", but I
believe this is effectively true given the restrictions necessary for
non-contiguous memory systems and systems with different representations
for various pointer types.  I.e. only comparisons with NULL are valid in
C.

-- 
						Greg A. Woods

+1 416 218-0098                  VE3TCP            RoboHack <woods@robohack.ca>
Planix, Inc. <woods@planix.com>          Secrets of the Weird <woods@weird.com>