不良的编码实践?条件中的预递增 &&

Bad coding practice? A pre-increment in a condition with &&

本文关键字:编码 不良 条件      更新时间:2023-10-16

在我的代码中,我有

while (++num1begin >= 0 && isdigit(eq[num1begin]))

应该递增num1begin,检查num1bein现在是否大于或等于零,并检查其他条件。

这是糟糕的编码实践吗?(它确实在做我上面描述的事情吗?)

任何在您的条件下有副作用的事情都应该避免,因为这会迫使阅读此代码的人检查几次有效性。

换句话说,它很容易出错,而且很难调试。如果在ifwhile之前或内部增加变量,它也会起作用,但更容易理解。

while(++num1begin>=0&&isdigit(eq[num1begin])

所有个人偏好-IMHO没有错。我个人更喜欢简洁——以及在屏幕上多显示一行上下文——而不是之前在屏幕上显示++num1begin。。。。

对我来说,我本能地想检查++num1begin >= 0逻辑——这需要一点脑力劳动,但无论增量是在同一行还是之前的一行,都必须这样做。&&另一侧的评估顺序和使用安全性不需要考虑/努力,但会因读者而异。不过,你应该时刻考虑你的"观众"。。。如果其他程序员是专业的C++开发人员,他们应该对此非常满意。如果它们不是,并且可能不得不停下来思考短路评估和序列点,那么您可能需要将其拆分。陷入代码维护者的最低公分母并不总是最好的。。。人们应该学习语言。。。但不同的人群自然会遇到不同的代码库。

"我本能地想检查…"-num1begin用于索引到eqisdigit()意味着它是一个字符数组,因此我对该代码的关注包括:

  • CCD_ 9是否是有符号类型(因此第一个条件可能是false)
  • CCD_ 11的CCD_
  • num1begin >= 0在每次循环迭代中都被测试,但可能只需要第一次
  • 不存在用于搜索超过eq末尾的检查

对上述任何一项的更正都可能保证放弃当前代码,但如果代码功能正确且有效,那么我也可以。