为什么我可以指定结构但不能比较它们

时间:2009-12-10 18:19:36

标签: c struct compare assign

即使我是一名长期的C程序员,我最近才知道可以直接将结构变量分配给另一个而不是使用memcpy:

struct MyStruct a,b;
...
a = b; /* implicit memcpy */

虽然这对C感觉有点“高级”,但它绝对有用。但为什么我不能做平等和不平等比较:

if (a == b) ...
if (a != b) ...

标准有没有充分理由排除这个?或者这是一个不一致的 - 否则非常优雅 - 标准?

我不明白为什么我可以用干净的作业替换我的memcpy,但是我必须保留那些丑陋的memcmp。

1 个答案:

答案 0 :(得分:27)

根据comp.lang.c FAQ

  

编译器没有好办法   实施结构比较   (即支持==运算符   结构)与...一致   C的低级味道。一个简单的   逐字节比较可以创建   对未使用的随机位   结构中的“洞”(例如   padding用于保持对齐   以后的字段正确)。逐场比较可能需要不可接受的数量   大型结构的重复代码。   任何编译器生成的比较   不能指望比较   指针字段适当的   案例:例如,它经常发生   适合比较char *字段   用strcmp而不是==。

     

如果你需要比较两个结构,   你必须写自己的功能   这样做,逐场。