【发布时间】:2012-09-09 20:41:51
【问题描述】:
在这一行
if ((last_search == NULL) || (last_search != NULL && total_results != 0))
我知道 C 的短路评估规则说,只有当 last_search 不为空时,它才会尝试评估 || 的右侧,因此它相当于写作
if ((last_search == NULL) || (total_results != 0))
有人建议我使用后者,但前者不是更具可读性吗?编译器也不会优化掉多余的last_search != NULL吗?
【问题讨论】:
-
不,是的。更少的代码就是更多。
-
旁注:我宁愿将常量向左移动,
(NULL == last_search)..., -
@a1ex07 我知道这只是个人喜好(而且我知道我最近看到了这种趋势),但对我来说,把常数放在左边会让它更难阅读。我把它读作“如果 NULL 等于 ...”,这是错误的,因为 NULL 是一个常量并且不会改变。 “如果 last_search 等于 ...”对我来说是一种更自然、更容易理解的读法。
-
显而易见的事情不应该被提及..所以第一种情况,在某种程度上,只是有一些冗余。
-
@a1ex07 我认为将常量向左移动是个坏建议。您正在测试
last_search值是否为NULL而不是NULL是否为last_search值。
标签: c if-statement conditional readability short-circuiting