即使我是一名长期的C程序员,我最近才知道可以直接将结构变量分配给另一个而不是使用memcpy:
struct MyStruct a,b;
...
a = b; /* implicit memcpy */
虽然这对C感觉有点“高级”,但它绝对有用。但为什么我不能做平等和不平等比较:
if (a == b) ...
if (a != b) ...
标准有没有充分理由排除这个?或者这是一个不一致的 - 否则非常优雅 - 标准?
我不明白为什么我可以用干净的作业替换我的memcpy,但是我必须保留那些丑陋的memcmp。
答案 0 :(得分:27)
编译器没有好办法 实施结构比较 (即支持==运算符 结构)与...一致 C的低级味道。一个简单的 逐字节比较可以创建 对未使用的随机位 结构中的“洞”(例如 padding用于保持对齐 以后的字段正确)。逐场比较可能需要不可接受的数量 大型结构的重复代码。 任何编译器生成的比较 不能指望比较 指针字段适当的 案例:例如,它经常发生 适合比较char *字段 用strcmp而不是==。
如果你需要比较两个结构, 你必须写自己的功能 这样做,逐场。