C ++ nil vs NULL

时间:2009-11-05 21:06:09

标签: c++ null

好的,我在头文件中有一些C ++代码,声明如下:

void StreamOut(FxStream *stream,const FxChar *name = nil);

我得到:错误:

'nil' was not declared in this scope
nil是一个pascal的东西,对吗?

我应该使用NULL吗?

我认为他们都是相同的,或者至少是零,不是吗?

7 个答案:

答案 0 :(得分:19)

在C ++中,您需要使用NULL,0或某些全新的编译器nullptr。 NULL与0的使用在某些圈子中可能有点争论,但恕我直言,NULL是比0更受欢迎的用法。

答案 1 :(得分:13)

标准C ++中不存在

nil。请改用NULL

答案 2 :(得分:4)

是。它在NULLC中为C++,而在Objective-C中为nil

每种语言都有自己的无对象标识符。在C标准库中,NULL((void *)0)的typedef。在C++标准库中,NULL00L的typedef。

然而,恕我直言,你不应该使用0代替NULL,因为它有助于代码的可读性,就像在代码中有常量变量一样:不使用NULL,值0用于空指针以及循环中的基本索引值以及空列表的计数/大小,这使得更难以知道哪一个是哪个。此外,grep等等更容易。

答案 3 :(得分:2)

0是C ++的推荐和常用样式

答案 4 :(得分:1)

如果你通过glibc进行搜索,你会发现这行代码:

#define NULL 0

这只是标记空指针的标准方式(不确定它是否在任何地方发布)。变量值0仍然是一个值。指向0的指针(0x0000 ...(它的十进制零))实际上指向无处。这只是为了可读性。

int *var1, var2;
var1 = 0;
var2 = 0;

上述两个作业虽然看起来都相同,但却不尽相同

答案 5 :(得分:0)

只需在开头添加

#define null '\0'

或任何你想要的而不是null并坚持你喜欢的。 C ++中的 null 概念只与指向任何内容的指针(0x0)相关。

请注意,每个编译器都可能有自己的null,nil,NULL等等的定义..但最后它仍然是0。

可能在源代码中你看到的是

#define nil '\0'

头文件中的某个地方..

答案 6 :(得分:0)

我看到了一些关于为什么不使用0的评论。通常人们不喜欢幻数,或者背后有意义的数字。给他们一个名字。我宁愿在代码中看到超过42的ANSWER_TO_THE_ULTIMATE_QUESTION。

至于nil,我也知道使用nil的Obj-C。我不愿意认为有人反对NULL的非常流行的约定(或者至少我记得),我认为这是在某个标准库头中。我有一段时间没有做过C ++。