因此C和C++定义NULL是不同的。C++的编写者必须一定NULL好像0或0L。比如:
// C++ implementations usually define NULL this way
#define NULL 0
#define NULL 0L
对比C,C的编写者可以定义NULL为各种形式,包括一下这种:
// C compilers may define NULL this way
#define NULL ((void*)0)
在C++中,没有明白的造型,void*是不会隐讳的转换成为其他类型的指针。如果C++保留C的习惯,如C++的语句为:
char * p = NULL;
可以扩大为:
//compile time error: incompatible pointer types
char * p = (void*) 0;
但是在C++中,void*的隐含模式允许为其他的数据指针。在优先表示NULL中,C++通常用0好过void类型的指针。事实上,C++鼓励用0代替NULL。例如:
int *p=0;
string *ps=new string;
delete ps;
ps=0; //mark ps as deleted
尽管这两种NULL的表示方法的区别对于用户来说不是那么重要,但是在交叉式平台的开发中,这两种方法的区别是很重要的。