即使我很长的时间C程序员,我最近才了解到,可以直接分配结构变量彼此而不是使用的memcpy:

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

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

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

有没有什么好的理由的标准来排除这一点?或者,这是在一个矛盾 - 否则很优雅 - 标准呢?

我不明白为什么我可以代替我的memcpy的清洁任务,但我必须让那些丑陋的memcmp的到位。

有帮助吗?

解决方案

comp.lang.c常见问题解答

  

有为编译器没有好办法   实现结构比较   (即以支持==操作符   结构),这是具有一致的   C'S低层次的味道。一个简单的   逐字节比较可能的创始人   存在于未使用的随机比特   在结构中的“洞”(例如   填充用于保持对准   后来字段的正确)。一种场逐场比较可能需要不可接受量的   大型结构重复的代码。   任何编译器生成的比较   不能期望比较   在所有指针字段适当地   案例:例如,它常常   适合比较的char *领域   使用strcmp而非==。

     

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top