正确的定义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 *的表达式称为空指针常量

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

 #define NUL '\0' 

NULL应仅用作指针常量。