我所知,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
是等效的。 当需要另一种0
时,不应使用NULL
,即使它可能有效,因为这样做会发送错误的样式信息。(此外,ANSI允许((void *)0)
NULL
的定义,这在非指针上下文中根本不起作用。特别是,当需要 ASCII 空字符 (NUL) 时,不要使用 NULL
。提供您自己的定义
#define NUL ' '
NULL
应仅用作指针常量。