Subject: Re: NULL return value checking
To: Gary Thorpe <gat7634@hotmail.com>
From: Greg A. Woods <woods@weird.com>
List: tech-kern
Date: 04/24/2002 04:13:00
[ On Tuesday, April 23, 2002 at 18:44:20 (-0400), Gary Thorpe wrote: ]
> Subject: Re: NULL return value checking
>
> I have always seen NULL defined as 0.

I've seen "(void *)0" in several compilers, but it caused far more
problems than it solved and I've always undef'ed it and reset it to just
plain "0" (zero that is) in my code.....  :-)

> However, NULL simply represents an 
> invalid value for a pointer, and its actually value is PLATFORM SPECIFIC as 
> far as ANSI compliant code goes. That is, a platform can define NULL to be 
> any value which the platform would interprit to be an invalid pointer. NULL 
> is usually zero because the first address in memory is usually never 
> referenced or reserved.

I don't think that's true.  Can you quote chapter and verse on that?  (I
don't have a copy of the ANSI standard...)

> Assuming it is zero is technically incorrect. It *could* be non-zero, in 

I'm pretty sure that's not true.

I do have a copy of the ISO/IEC 9899:1999 document, and it says quite
explicitly:

    An integer constant expression with the value 0, or such 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.

I.e. no matter how it's defined, NULL == 0.

-- 
								Greg A. Woods

+1 416 218-0098;  <gwoods@acm.org>;  <g.a.woods@ieee.org>;  <woods@robohack.ca>
Planix, Inc. <woods@planix.com>; VE3TCP; Secrets of the Weird <woods@weird.com>