9

据我所知,C定义NULL如下:

#define NULL ( (void *) 0)

那么,我们该如何定义NULL_POINTER呢?我在我的程序中将它定义为相同的并且它有效,但我认为这只是一个巧合:

#define NULL_POINTER ( (void *) 0)

如果有的话,逻辑定义是什么?

4

2 回答 2

16
#define NULL ( (void *) 0)

#define NULL 0

都是有效的。如果您需要为空指针实现自己的宏,则适用相同的规则。

C11(ISO/IEC 9899:201x) §6.3.2.3指针第 3 节

具有值的整型常量表达式0,或这种类型转换为类型的表达式 void *,称为空指针常量。

于 2013-09-13T08:20:16.657 回答
4

它仅在指针上下文中NULL0等效的。NULL当需要另一种类型时不应使用0,即使它可能有效,因为这样做会发送错误的风格信息。(此外,ANSI 允许定义NULLto ,这在非指针上下文中根本不起作用。)特别是,当需要 ASCII 空字符 (NUL) 时((void *)0)不要使用。NULL提供您自己的定义

#define NUL '\0'

NULL只能用作指针常量。

于 2013-09-13T08:27:02.713 回答