gpt4 book ai didi

c - 三问 : Is NULL - NULL defined? (uintptr_t)NULL - (uintptr_t)NULL 定义了吗?

转载 作者:行者123 更新时间:2023-12-05 01:09:57 32 4
gpt4 key购买 nike

  1. 是否定义了NULL - NULL

  2. (char *)NULL - (char *)NULL 定义了吗?

  3. 是否定义了(uintptr_t)NULL - (uintptr_t)NULL

我知道它适用于我使用的所有实现。但是从标准的角度来看它是什么样子的呢?我找不到明确的答案。

编辑:从欺骗我假设问题的一个答案是:是的。

第二个和第三个问题呢?

最佳答案

C 标准文档 NULL被定义为一个宏,它扩展为一个实现定义的空指针常量

根据实际定义,表达式NULL - NULL可能有一个定义的值,也可能没有。例如:

  • 如果 NULL定义为 #define NULL 0 ,然后 NULL - NULL实际上是 int 类型的常量表达式值为 0 .
  • 如果 NULL定义为 #define NULL ((void *)0) , 表达式 NULL是违反约束的,因为算术没有在 void 指针上定义。

第二个问题:(char*)NULL - (char*)NULL(uintptr_t)NULL - (uintptr_t)NULL定义?。这些表达式不再违反约束:

  • 自从 void * 转换后算术类型是实现定义的,没有什么可以说 (uintptr_t)NULL - (uintptr_t)NULL 的值.它将是 0在大多数当前系统上,但 C 标准没有定义它。

  • 转换为 (char *)是一个稍微不同的问题:两个指针的差异仅在它们指向同一个数组或数组最后一个元素之后的位置时才定义,在本次讨论中,一个对象被认为是一个元素的数组。 (char *)NULL 中的情况并非如此。 ,它是一个空指针,因此不指向任何数组或对象。

关于c - 三问 : Is NULL - NULL defined? (uintptr_t)NULL - (uintptr_t)NULL 定义了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64739189/

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