Re: using literal zero for NULL
- From: "Jon A. Cruz" <jon joncruz org>
- To: Hubert Figuiere <hfiguiere teaser fr>
- Cc: gtk-devel-list gnome org
- Subject: Re: using literal zero for NULL
- Date: Tue, 21 Mar 2006 09:13:53 -0800
On Mar 21, 2006, at 8:37 AM, Hubert Figuiere wrote:
Jon A. Cruz wrote:
Thanks. I am using c++ so I must use protptypes. I use -Wall also.
For C++, 0 is supposed to be preferred over NULL. For varargs,
though, the compiler might not know your intent. I've seen places
that state modern compliers treat NULL as exactly 0 (in which case
static_cast<void*>(0) should do the trick), however you should
probably check on a C++ newsgroup for details.
I did the following program in C++:
#include <stdio.h>
int main(int argc, char** argv)
{
printf("NULL: %d\n", sizeof(NULL));
printf("zero: %d\n", sizeof(0));
}
The output on amd64 is as follow:
NULL: 8
zero: 4
Note that in C, I get the exact same result.
So there is no reason to prefer 0 over NULL for pointers.
There are actually many reasons, and depending on the compiler,
you'll see different things.
In the case you have there, you don't actually use NULL or 0, so the
compiler goes with what it feels like. Try this instead:
#include <stdio.h>
#include <string.h>
int main(int argc, char** argv)
{
void* p1 = 0;
memset( &p1, 0xcc, sizeof(p1) );
p1 = 0; // try both with and without this line
unsigned char* itr = reinterpret_cast<unsigned char*>(&p1);
for ( size_t i = 0; i < sizeof(p1); i++ )
{
printf(" %02x\n", itr[i] );
}
}
Comment out p1=0 and you should see a bunch of CCs. Put it back and
you should see all 00s, not just half zeros.
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]