你认为这种糟糕的编码风格吗?

Jos*_*lta 1 c coding-style

我今天看到这个代码:

 if(++counter == 10)
{

 //Do Something
 foo();

 }
Run Code Online (Sandbox Code Playgroud)

我认为这是一种糟糕的风格,但是,执行编译器依赖于它吗?比如在我们到达这一行之前计数器设置为8,它会增加它,然后比较10到8,之前的值,或比较10到9,计数器增加后的值?

你觉得怎么样?这是常见做法吗?坏风格?

AnT*_*AnT 12

在此代码的行为中没有任何编译器依赖(除了可能的溢出行为).是否一个好的风格是个人喜好的问题.我一般不会在条件限制中进行修改,但有时它可能有用甚至优雅.

保证此代码将值与10 进行比较(即在您的示例中将9与10进行比较).正式地说,在增加之后 进行比较是不正确的counter.这里没有"之前"或"之后".新值可以预先计算并在物理放入之前与10进行比较counter.

换句话说,评估++counter == 10可以继续进行

counter = counter + 1
result = (counter == 10)
Run Code Online (Sandbox Code Playgroud)

或者作为

result = ((counter + 1) == 10)
counter = counter + 1
Run Code Online (Sandbox Code Playgroud)

注意,在第一种情况下counter,在比较之前递增,而在第二种情况下,在比较之后递增.这两种方案在实践中都是有效且完全可能的.两种方案都产生语言规范所需的相同结果.