代码之家  ›  专栏  ›  技术社区  ›  Tomas

为什么我可以分配结构,但不能比较它们

  •  24
  • Tomas  · 技术社区  · 15 年前

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

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

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

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

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

    我不明白为什么我可以把我的备忘录换成干净的作业,但我必须保留那些难看的备忘录。

    1 回复  |  直到 12 年前
        1
  •  27
  •   Jonathan Feinberg    15 年前

    每个 comp.lang.c FAQ :

    编译器没有好的方法 实现结构比较 (即支持==运算符 结构)与 C的低级风味。一个简单的 逐字节比较可以建立 在未使用的随机位上 结构中的“孔”(如 填充用于保持对齐 后面字段正确)。逐字段比较可能需要不可接受的数量 大型结构的重复代码。 任何编译器生成的比较 无法进行比较 所有的指针字段 案例:例如,通常 适合比较char*字段 使用strcmp而不是==。

    如果需要比较两种结构, 你得自己写函数 为此,请逐个字段。