将null定义为NULL的小写版本? C ++

时间:2015-04-02 21:42:02

标签: c++ null user-defined-types

在这里快速提问,我不是在大写中输入 NULL 的忠实粉丝,我想知道我是否可以定义小写< / em>版本。

当我尝试在头文件中将其定义为:

#define null NULL;

它允许编译这一行,但如果我尝试在我的代码中的任何地方调用 null ,我会收到语法错误。

例如,如果我写:

if(root == null){ /* Code here */}

Eclipse告诉我这是一个语法错误,如果我尝试构建我的项目,我会收到此错误:

null error

NULL 是一个特殊情况,我不允许这样做,或者我做错了什么?

4 个答案:

答案 0 :(得分:10)

如果您使用的是C ++ 11编译器,请使用nullptr,而不必担心#define

如果您必须使用#define,请从该行中删除;

#define null NULL

答案 1 :(得分:5)

该行末尾的分号是错误的。正确的

#define null NULL

答案 2 :(得分:4)

正如其他答案已经说明的那样,您的错误是写#define null NULL;而不是#define null NULL。如果您想完全定义null,您应该将其实际定义为nullptr。试想一下,如果这些功能可用,foo(NULL);会调用什么:

void foo(int* param);
void foo(int param);

答案是 依赖于实现 [1],因为NULL可能是0nullptr,所以这是实际上 非便携式 代码。

我还想补充一点,在你的例子中根本不需要对NULL进行测试,因为if (root)具有完全相同的效果。

[1]从目前的标准工作草案(N4296 / 2014-11-19):

  

18.2类型
  [...]
  3)宏NULL是本国际标准(4.10)中实现定义的C ++空指针常量.194

  

4.10指针转换
  1)空指针常量是一个整数文字(2.13.2),其值为零或者是一个类型为std :: nullptr_t的prvalue   

答案 3 :(得分:2)

为什么不使用nullptr?这是小写的类型安全!