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

Define null as a lower case version of NULL? c++

这里是个简单的问题,我不太喜欢总是以 大写 输入 NULL,我想知道我是否可以定义一个 小写 版本。

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

#define null NULL;

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

例如,如果我写:

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

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

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

如果您使用的是 C++11 编译器,请使用 nullptr,不要理会 #define

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

#define null NULL

行尾的分号是错误的。右边

#define null NULL

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

如其他答案所述,您的错误是写 #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 Types
[...]
3) The macro NULL is an implementation-defined C++ null pointer constant in this International Standard (4.10).194

4.10 Pointer conversions
1) A null pointer constant is an integer literal (2.13.2) with value zero or a prvalue of type std::nullptr_t .