【发布时间】:2026-02-06 07:40:01
【问题描述】:
我遇到了一个令人费解的符号:
if(ptr != (void)(NULL)) {
//some action
}
所以它扩展到
if(ptr != (void)((void *)0)) {
//some action
}
这至少看起来很奇怪。 这背后真的有任何理由吗,还是根本没有意义,甚至是错误的?不过它编译得很好(在 linux / gcc 上,不记得版本)。
-编辑-
我今天检查了该代码,这是新信息: 首先,在宏中使用了强制转换,并且它扩展为
return (void)((void*)0);
在返回 void 的函数中。 该代码在(Red Hat 4.1.2-50)上使用 gcc (GCC) 4.1.2 20080704 编译。 那么,这个语句是否等同于
return void;
相当于
return;
或者还有更多的东西吗?
【问题讨论】:
-
我很惊讶这甚至完全编译 - 你不应该能够比较 void 类型的值。你确定这不是
void *的演员表吗? -
绝对肯定,这就是我感到困惑的原因。
-
是的,根本无法编译
-
能否请您提供您使用的编译器?这在我的
gcc版本上无法编译。 -
是的,如果这不能编译,auto ptr = (void)((void *)0);那么你的问题中遗漏了一些东西