C 语言中 = 区别于 Algol 系派生语言 Pascal 和 Ada 等,用于相等比较的时候,使用 ==,而用于赋值的时候使用 =。
由于这样的特殊性,在一个表达式中可以出现多个 = 或者 == 同时出现(与三元表达式 c=a==b?1:2),并产生复杂的嵌套。
这样从一方面来说增加了表达式的遍历性,但同时会导致一个潜在的问题:程序员写错怎么办?
if (x = y) {
break;
}
而实际上是将 y 的值赋给了 x ,然后检查该值是否为零,但实际上有可能事与愿违,造成比较大的恶果。
针对该陷阱,可以养成以下两个良好的习惯客服。
int const y = 0;
if (y == x) {
break;
}
if (abs (y) == 0) {
break;
}
if ((x = y) != 0) {
break;
}