【发布时间】:2021-02-20 17:45:41
【问题描述】:
相关:Three questions: Is NULL - NULL defined? Is (uintptr_t)NULL - (uintptr_t)NULL defined?
让我们考虑一下:
-
案例 1:
(uintptr_t)NULL - (uintptr_t)NULL结果会一直为零吗? -
案例 2(受 Eric 评论启发):
uintptr_t x = (uintptr_t)NULL;
x - x 会一直为零吗?
- 案例 3:
uintptr_t x = (uintptr_t)NULL, y = (uintptr_t)NULL;
x-y 会一直为零吗?
- 案例4:
void *a;
/* .... */
uintptr_t x = (uintptr_t)a, y = (uintptr_t)a;
x-y 会一直为零吗?
如果不是 - 为什么?
【问题讨论】:
-
你问的是理论还是实践?因为我可以编写一个编译器,并在我的自定义编译器中记录它“表达式 NULL - NULL 等于 0,除非在第 12 行,则它等于 62”,它仍然是“实现定义的”(简直疯了)。如果这样的编译器仍然可以达到程序的一致行为(即,它将跟踪在指针值内的哪一行上转换了哪些指针),那么它可能没问题。
-
@KamilCuk 做吧! :D
-
@KamilCuk 你知道“语言律师”标签是什么意思吗?
标签: c language-lawyer