正确的定义NULL和NULL_POINTER的方法?

时间:2013-09-13 08:18:23

标签: c pointers null c-preprocessor

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

#define NULL ( (void *) 0)

然后,我们应该如何定义NULL_POINTER?我在我的程序中定义它是相同的并且它有效,但我想这只是一个巧合:

#define NULL_POINTER ( (void *) 0)

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

2 个答案:

答案 0 :(得分:15)

#define NULL ( (void *) 0)

#define NULL 0

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

  

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

     

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

答案 1 :(得分:4)

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

#define NUL '\0'

NULL应仅用作指针常量。