我为什么可以分配结构,但没有对它们进行比较
题
即使我很长的时间C程序员,我最近才了解到,可以直接分配结构变量彼此而不是使用的memcpy:
struct MyStruct a,b;
...
a = b; /* implicit memcpy */
虽然这种感觉有点“高电平”为C,这是绝对有用的。但是,为什么我不能做到平等和不平等的比较:
if (a == b) ...
if (a != b) ...
有没有什么好的理由的标准来排除这一点?或者,这是在一个矛盾 - 否则很优雅 - 标准呢?
我不明白为什么我可以代替我的memcpy的清洁任务,但我必须让那些丑陋的memcmp的到位。
解决方案
有为编译器没有好办法 实现结构比较 (即以支持==操作符 结构),这是具有一致的 C'S低层次的味道。一个简单的 逐字节比较可能的创始人 存在于未使用的随机比特 在结构中的“洞”(例如 填充用于保持对准 后来字段的正确)。一种场逐场比较可能需要不可接受量的 大型结构重复的代码。 任何编译器生成的比较 不能期望比较 在所有指针字段适当地 案例:例如,它常常 适合比较的char *领域 使用strcmp而非==。
如果你需要比较两个结构, 你必须写自己的功能 通过场这样做,字段。
不隶属于 StackOverflow