为何用==比较RGB结构体实例会触发'invalid operands'编译错误?
为什么C语言中不能直接用
==比较结构体? 在C语言中,结构体类型没有默认的相等比较运算符支持,这就是你遇到编译错误的核心原因。
C标准明确规定,==运算符仅能用于以下场景:
- 内置算术类型(如
int、float、char等)的数值比较 - 指针类型的比较(判断两个指针是否指向同一内存地址)
- 联合体类型的比较(当联合体的所有成员均为可比较的内置类型时)
结构体并不在上述允许的范围内——C语言没有为结构体预设逐成员比较的逻辑,哪怕两个结构体的成员完全一致,直接用*x == *y这种写法也属于语法错误,编译器无法识别该如何处理两个结构体的比较操作,因此会抛出invalid operands to binary expression的错误提示。
你后来采用的逐个比较结构体成员的方式,是C语言中判断结构体内容是否相等的标准且正确的做法。另外,你可以简化代码逻辑,无需额外的if分支,直接返回比较表达式的结果:
bool point_to_equal_values_struct(RGB *x, RGB *y) { return x->r == y->r && x->g == y->g && x->b == y->b; }
这里用->运算符替代(*x).r的写法,代码会更简洁易读。
内容的提问来源于stack exchange,提问作者Jason
相关产品推荐
相关产品推荐

