天天看点

《编写高质量代码:改善c程序代码的125个建议》——建议16-2:尽量避免编写多用途的、太复杂的复合表达式

本节书摘来自华章计算机《编写高质量代码:改善c程序代码的125个建议》一书中的第2章,建议16-2,作者:马 伟 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

c语言中的复合表达式是指如 a = b = c = 0这样的表达式,它不仅书写简洁,还可以提高编译效率,所以在专业的c程序中经常可以看到。接下来看这样一个例子:

有过面试经历的读者看上面的代码应该比较眼熟,笔者也曾经见过多家企业将本题作为面试题,那么a的值究竟应该是多少呢?

由于赋值运算符号是从右向左结合的,因此可以将表达式写成如下形式:

根据表达式a=a+(a=a-(a=a*a)),可以将其拆成如下3步分别进行计算:

因此,表达式a+=a-=a*=a 所得到的结果为0。

从上面的示例可以看出,虽然复合表达式可以提高编译效率,但是太复杂的复合表达式就适得其反了。同时,还应该避免编写有多用途的复合表达式,例如:

该表达式既求a的值又求d的值,应该将其拆分为两个独立的语句,代码如下:

继续阅读