什么类型是NULL?

我想知道Null是什么类型的C.这可能是重复的,但我一直在搜索中获得有关void类型的信息。 也许更好的方法是可以为任何类型函数返回NULL吗? 例如:

int main(){ dosomething(); return NULL; } 

那样有用吗?

Per C 2011 7.19 3, NULL “扩展为实现定义的空指针常量”(当包含几个头中的任何一个时: )。

根据6.3.2.3 3,空指针常量是“[A] n整数常量表达式,值为0,或者这样的表达式转换为类型void * 。”因此,C实现可以将NULL定义为0((void *) 0) ,例如。 请注意,前者是int ,而不是指针,但它可以与指针进行比较,如if (p == NULL) …

通常, NULL旨在用于指针,而不是用于int值。

在大多数C实现中,将NULL转换为整数将产生零。 但是,在C标准中我没有看到这一点。 (例如,我没有看到(int) (void *) 0 == 0 。)

什么类型是NULL?

简短回答: NULL的类型是void*intlongunsigned ,…


除了@Eric Postpischil的精细答案,指出更多的编码陷阱。

(宏) NULL ,它扩展为实现定义的空指针常量 。 C11dr§7.193

值为0的整型常量表达式或类型为void *的表达式称为空指针常量 。 §6.3.2.33

NULL类型有很多可能性,给定“整数常量”。 可饮用代码不应该采用特定类型。 NULL最适用于指针上下文。

 // Poor code as NULL may not match the type of the specifier - undefined behavior printf("%p\n", NULL); // poor printf("%d\n", NULL); // poor // Better printf("%d\n", (int) NULL); // Best. NULL is best used in a pointer context, print as a pointer printf("%p\n", (void *) NULL);