好的,我在头文件中有一些C ++代码,声明如下:
void StreamOut(FxStream *stream,const FxChar *name = nil);
我得到:错误:
'nil' was not declared in this scope
nil是一个pascal的东西,对吗?
我应该使用NULL吗?
我认为他们都是相同的,或者至少是零,不是吗?
答案 0 :(得分:19)
在C ++中,您需要使用NULL
,0或某些全新的编译器nullptr。 NULL
与0的使用在某些圈子中可能有点争论,但恕我直言,NULL
是比0更受欢迎的用法。
答案 1 :(得分:13)
nil
。请改用NULL
。
答案 2 :(得分:4)
是。它在NULL
和C
中为C++
,而在Objective-C中为nil
。
每种语言都有自己的无对象标识符。在C
标准库中,NULL
是((void *)0)
的typedef。在C++
标准库中,NULL
是0
或0L
的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 ++。