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