在 C 中将 NULL 转换为结构指针有什么好处吗?
例如:
typedef struct List
{
....
} List;
List *listPtr = ((List *) NULL) ;
来自 PostgreSQL 源的示例:
#define NIL ((List *) NULL)
最佳答案
在赋值示例中,显式强制转换没有任何意义。但是,您的问题似乎实际上是关于 #define NIL ((List *) NULL)
宏的,它的可用性超出了赋值范围。
它可能有意义的一个地方是当您将它传递给可变参数函数或没有原型(prototype)声明的函数时。标准的 NULL
可以定义为 0
或 0L
或 ((void *) 0)
或其他一些方式,这意味着它可能在这种无类型的上下文中有不同的解释。显式转换将确保它被正确解释为指针。
比如这个一般是无效的(behavior is undefined)
void foo();
int main() {
foo(NULL);
}
void foo(List *p) {
/* whatever */
}
同时用
替换调用foo(NIL);
使其有效。
关于将 NULL 强制转换为 C 中的结构指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12094174/