正确的定义NULL和NULL_POINTER的方法?
据我所知, 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允许NULL
的定义为((void *)0)
,这在非指针上下文中根本不起作用。)特别是,当需要ASCII空字符(NUL)时,不要使用NULL
。 提供您自己的定义
#define NUL '\0'
NULL
应仅用作指针常量。