2.1 '==‘与’='并非胖与瘦一样容易分辨
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;
}