将 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
可能是0
或nullptr
,所以这实际上是不可移植代码。
我还想补充一点,在您的示例中根本不需要针对 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
.
这里是个简单的问题,我不太喜欢总是以 大写 输入 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
可能是0
或nullptr
,所以这实际上是不可移植代码。
我还想补充一点,在您的示例中根本不需要针对 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 .