我知道NULL
不要求是全零模式,但我想知道是否
(注:本文中的“NULL”指空指针)
uintptr_t x = (uintptr_t)NULL;
printf("%" PRIuPTR, x);
这段代码是否确保输出0
?我怀疑不是,但只是想确认一下。
更重要的是,我能相信它吗?
if( ((uintptr_t)f(x) | (uintptr_t)f(y)) != 0)
假设
f
是一个返回指针的函数。我怀疑这段代码严重依赖于 NULL
是一种全 0 位模式。我的猜测正确吗?我知道这被认为是一种不好的做法,而我自己也永远不会写这样的代码,但我想知道这是否被定义良好。
我在这个答案中遇到了这段代码,作者正在使用它。
while ( ( (uintptr_t)fgets(a,100,fp1) | (uintptr_t)fgets (b,100,fp) ) != 0 ) {
printf("%s",a);
printf("%s",b);
}
if (f(x) || f(y))
? - WhozCraig(uintptr_t)
的技巧的情况下完成。 - Ian Abbott~0
(例如)。这样会破坏成千上万的程序。 - i486uintptr_t
的目的是什么? - klutt