【发布时间】:2011-08-24 16:45:48
【问题描述】:
正如大多数 C 程序员所知,您不能直接比较两个结构。
考虑:
void isequal(MY_STRUCT a, MY_STRUCT b)
{
if (a == b)
{
puts("equal");
}
else
{
puts("not equal");
}
}
a==b 比较将在任何合理的 C 编译器上引发 AFAIK 编译错误,因为 C 标准不允许内置结构比较。由于对齐、打包、位域等原因,使用 memcmp 的解决方法当然是一个坏主意,因此我们最终编写逐个元素的比较函数。
另一方面,它确实允许结构分配,例如a = b 完全合法。
很明显,编译器可以相当简单地处理这个问题,那么为什么不比较呢?
我唯一的想法是结构分配可能与 memcpy() 相当接近,因为对齐等导致的间隙无关紧要。另一方面,比较可能更复杂。或者这是我缺少的东西?
显然,我知道逐个元素进行简单的比较是不够的,例如如果结构包含指向字符串的指针,但在某些情况下它会很有用。
【问题讨论】:
-
投票结束:我认为这是一个非常有趣的问题,但同时,我认为您不太可能得到任何不仅仅是猜测的答案。
-
如果每个结构都通过两次不同的 malloc 调用分配内存,你将如何处理 void 指针
-
Void 指针可以单独比较是否相等。如果一个结构包含一个与另一个结构中的 void 指针不同的 void 指针,我希望它们比较为不相等。
标签: c