a long time!
Thanks again.
-mandeep
On 10/24/06, Ricard Wanderlof
<ricard.wanderlof@xxxxxxxx> wrote:
On Tue, 24 Oct 2006, Mandeep Sandhu wrote:
> I read some time ago (can't remember where!), that 0 is not always
> an invalid address. Though I think the C compiler is supposed to generate
> one for any such assignments (as shown above). Is this a C standard?
> Are all compilers supposed to do it?
> Shouldn't NULL be a better choice so that we can #define it to an invalid
> value, where this #define is specific to an architechture?? CMIIW.
This is a confusing issue which crops up now and then. There's a very
lucid explanation of 0 vs. NULL vs. illegal values in the C FAQ, see for
instance http://c-faq.com/null/index.html .
In short, when a compiler sees a 0 in a pointer context, it converts into
the internal representation for a null pointer for the architecture in
question. It doesn't matter if it's used in assigment ( p = 0 ) or as part
of an _expression_ ( if (p == 0) ), or even implicitly in an _expression_ ( if
(!p) ).
It is also true that most processors actually use the value 0 for
the null pointer.
Semantically NULL is identical to 0, so if you write p = 0 or p = NULL
there is absolutely no difference as far as the compiler is concerned.
NULL is usually #defined to 0, and 0 will cause the compiler to create a
null pointer in a pointer context. In many cases NULL is #defined to (void
*) 0 in order to catch type conversion bugs.
At any rate, many people feel that NULL is better than 0 when used with
pointers as it indicates that the _expression_ is a pointer type. But it
makes no difference to the compiler or to the resulting code.
/Ricard
--
Ricard Wolf Wanderlöf ricardw(at)axis.com
Axis Communications AB, Lund, Sweden www.axis.com
Phone +46 46 272 2016 Fax +46 46 13 61 30
--
Kernelnewbies: Help each other learn about the Linux kernel.
Archive: http://mail.nl.linux.org/kernelnewbies/
FAQ: http://kernelnewbies.org/faq/