【问题标题】:error: invalid operands to binary == (have 'struct demo' and 'struct demo') [duplicate]错误:二进制==的无效操作数(有'struct demo'和'struct demo')[重复]
【发布时间】:2014-02-11 16:45:27
【问题描述】:

代码 1:

struct demo
{
    int a;
}d[2];

int main()
{
    d[0].a=5;
    d[1]=d[0];
    return 0;
}

这段代码运行良好

代码 2:

struct demo
{
    int a;
}d[2];

int main()
{ 
    d[0].a=5;
    d[1]=d[0];
    if(d[0]==d[1])
    {
        printf("hello");
    }
return 0;
}

此代码给出错误

error: invalid operands to binary == (have 'struct demo' and 'struct demo')

为什么代码 2 中会出现此错误?

【问题讨论】:

  • 你不能用==比较任意结构,写你自己的比较函数或者使用memcmp
  • @Barmar 为什么在这些答案中都提到了memcmp?我不明白,结构可以有我们不知道值的填充。另一个链接的答案,太奇怪了。

标签: c arrays struct compiler-errors equality


【解决方案1】:

C 不支持结构比较。您必须通过一一比较所有成员来自己比较结构。

How do you compare structs for equality in C?

【讨论】:

    【解决方案2】:

    你需要自己比较结构体的成员,像这样:

    if(d[0].a ==d[1].a)
    

    结构不是相等的有效操作数(==),操作数必须是算术类型或指针。我们可以从draft C99 standard 部分6.5.9 看到这一点等式运算符

    应满足以下条件之一:

    • 两个操作数都有算术类型
    • 两个操作数都是指向兼容类型的合格或不合格版本的指针;
    • 一个操作数是指向对象或不完整类型的指针,另一个是指向对象的指针 void 的合格或不合格版本;或
    • 一个操作数是一个指针,另一个是一个空指针常量。

    【讨论】:

      猜你喜欢
      • 2017-03-01
      • 2021-03-11
      • 1970-01-01
      • 2012-12-22
      • 2015-11-21
      • 1970-01-01
      • 2018-10-25
      • 2017-07-06
      • 2016-01-06
      相关资源
      最近更新 更多