gpt4 book ai didi

c - 为什么编译器没有预定义 NULL

转载 作者:太空狗 更新时间:2023-10-29 14:56:26 26 4
gpt4 key购买 nike

这个问题困扰了我一段时间。我从来没有看到 NULL 的不同定义,它总是

#define NULL  ((void *) 0)

是否有任何架构以不同方式定义 NULL,如果有,为什么编译器不为我们声明它?

最佳答案

C 2011 标准,online draft

6.3.2.3 Pointers
...
3 An integer constant expression with the value 0, or such an expression cast to type void *, is called a null pointer constant. 66) If a null pointer constant is converted to apointer type, the resulting pointer, called a null pointer, is guaranteed to compare unequal to a pointer to any object or function.
66) The macro NULL is defined in <stddef.h> (and other headers) as a null pointer constant; see 7.19.

NULL 总是定义为零值常量表达式;它可以是裸 0,或 0 转换为 void * ,或其他计算结果为 0 的整数表达式。就您的源代码而言,NULL将始终计算为 0。

一旦代码被翻译,任何出现的空指针常量(0、NULL 等)都将被替换为底层架构用于空指针的任何内容,空指针可能是也可能不是 0 值.

关于c - 为什么编译器没有预定义 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16124397/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com