问题基于对亲回答sizeof NULL的讨论。
以下是标准的部分内容:
值为 0 的整数常量表达式,或转换为 type 的此类表达式
void *,称为空指针常量NULL扩展为实现定义的空指针常量
似乎并没有禁止#define NULL ((void*)0)简单地这样做#define NULL 0,就像专业人士所做的那样。然后结果证明它sizeof NULL等于sizeof (void*), 或sizeof (int)(在变体中sizeof 0)。
但是,来自莫斯科的@Vlad 指出C 中的 NULL 必须是指针。
NULL 在 C 中被定义为一个指针。
“cast to type void *”这句话在上面的引用中非常重要。
这里
или与类型转换无关,与表达式的形式有关。这就是 NULL 的定义方式。
那么C(没有加号)可以有吗?
#define NULL 0
如果是这样,为什么在编译器中使用它
#ifndef NULL
#ifdef __cplusplus
#define NULL 0
#else
#define NULL ((void *)0)
#endif
#endif
而不是两种语言都为零的更简单版本?
事实上,在 C 语言中,甚至没有函数重载,以至于某些东西可能会被破坏。