据我所知,C定义NULL
如下:
#define NULL ( (void *) 0)
那么,我们该如何定义NULL_POINTER
呢?我在我的程序中将它定义为相同的并且它有效,但我认为这只是一个巧合:
#define NULL_POINTER ( (void *) 0)
如果有的话,逻辑定义是什么?
据我所知,C定义NULL
如下:
#define NULL ( (void *) 0)
那么,我们该如何定义NULL_POINTER
呢?我在我的程序中将它定义为相同的并且它有效,但我认为这只是一个巧合:
#define NULL_POINTER ( (void *) 0)
如果有的话,逻辑定义是什么?
#define NULL ( (void *) 0)
和
#define NULL 0
都是有效的。如果您需要为空指针实现自己的宏,则适用相同的规则。
C11(ISO/IEC 9899:201x) §6.3.2.3指针第 3 节
具有值的整型常量表达式
0
,或这种类型转换为类型的表达式void *
,称为空指针常量。
它仅在指针上下文中NULL
是0
等效的。NULL
当需要另一种类型时不应使用0
,即使它可能有效,因为这样做会发送错误的风格信息。(此外,ANSI 允许定义NULL
to ,这在非指针上下文中根本不起作用。)特别是,当需要 ASCII 空字符 (NUL) 时((void *)0)
不要使用。NULL
提供您自己的定义
#define NUL '\0'
NULL
只能用作指针常量。