- 论坛徽章:
- 0
|
NULL不一定是0!这句话是俺今天第二次说。
NULL只是一个概念,叫作空值,其值本身没有任何含义,可以用0代替,也可以用1,...代替,只要这些值不会与系统实际的有效地址冲突即可。
因此,本人在此再次强调,不要自作聪明地认为NULL就是0,要判断的时候还是老老实实地与NULL做比较,别想当然地用什么!ptr之类的写法,因为在某个特定环境下,NULL可能不是0,而系统函数返回的是NULL不是0,那时,你的函数就会出现莫名其妙的错误。所以,养成良好的习惯是非常重要的。
忘了是谁第一个用了!ptr这样的写法,这个人该杀!害了多少人啊!
不知道C的标准如何。
至少NULL这个概念根本就不符合C++标准,C++没有NULL这个类型,某些库或者IDE支持NULL,说白了NULL其实是一个(void*)0这么一个宏而已。
if(!ptr) {} 这种用法,C++之父Stroustrup在他的书里面频繁的使用。
至少参考Stroustrup的 The C++ Programming Language。
参考见Stroustrup的FAQ,有关NULL的章节:http://www.research.att.com/~bs/bs_faq2.html#null
Stroustrup还给出了如下解释:
In C, it has been popular to define a macro NULL to represent the zero pointer. Because of C++’s tighter type checking, the use of plain 0, rather than any suggested NULL macro, leads to fewer problems. If you feel you must define NULL, use const int NULL = 0;
The const qualifier prevents accidental redefinition the NULL and ensures that NULL can be used where a constant is required.
C++之父不提倡定义一个红,他宁愿定义一个const int NULL = 0;的常量。
[ 本帖最后由 leeon868 于 2007-8-8 09:43 编辑 ] |
|