开发者

Instead of NULL, should I write `0x0` or `0`?

I know that you are supposed to use 0 instead of NULL in c++ (even though NULL is defined as 0 in C++ most of the time).

Recently I came across some code where 0x0开发者_开发技巧 was used instead, though.

What is the difference?


0x0 is just 0 written in hexadecimal notation. There is no difference between the two:

016 = 010 :)

NULL is usually #defined to 0 somewhere and does the same thing.


There is no difference. In C, NULL is often defined to be (void *)0, but in C++ that's not allowed. A few ancient compilers got this wrong, but they really are ancient.

IMO, it's better to use NULL, as it portrays the intent more clearly, and gives you a nice, easy symbol to S&R when your compiler gets updated to C++ 0x, which will include nullptr.


By the way, everyone,

0x0 is hex, as you have all mentioned, but

0 is Octal, not decimal! :-)

ie any number starting with 0 (and not followed by x) is octal:

0 = 0
01 = 1
02 = 2
...
07 = 7
010 = 8
011 = 9
012 = 10
...

:-)


0x0 and 0 represent the same value, so you can use the one that best suits your eye. When we get C++0x, we'll have the keyword nullptr to represent null pointers of any type.


0x0 is just an expression of the value 0 in hexadecimal. I doubt the compiler will care about the difference.


No difference

In my opinion, 0x0 is more explicit.

Some people may confuse 0 with "0"(0x30 -I´ve seen it happen).


Simply put, its a matter of taste. People like to write memory addresses in hexa decimal, so writing NULL as 0x0 would be more classic. For ordinary ones like me, 0 will suffice.


So, this site has some really good information on NULL: http://c-faq.com/null/index.html

NULL is actually the "null pointer" - so it might be of type, for example, "(void*)0". This tells the compiler that NULL is not to be treated as an int, but rather as a "pointer to an int". And in C, the compiler will give warnings/errors if the types don't match.

The value "0" and "0x0" are equivalent in C++. Whenever a number is prefixed by "0x", it means that that value is the hexadecimal representation of that number. For example, 0x5 == 5.

Also, 0xA [in hexadecimal, base 16) == 10 [in base 10].

edit

Here are some sources. In glibc, NULL seems to be defined differently in different places. (why should this be?)

#define NULL ((void *)0) (stdlib/gmp-impl.h)

#define NULL 0 (posix/getopt1.c)

edit2

well, it looks like i've missed the mark on this one! sorry! (CW'd. feel free to keep downvoting!)

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜