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

标签 c coding-style

我今天看到这段代码:

 if(++counter == 10)
{

 //Do Something
 foo();

 }

我认为这是不好的风格,但是,执行编译器是否也依赖于它?假设在我们到达这一行之前计数器设置为 8,它会增加它,然后比较 10 和 8,之前的值,或者比较 10 和 9,计数器增加后的值?

你怎么看?这是常见的做法吗?坏风格?

最佳答案

此代码的行为与编译器无关(除了可能的溢出行为)。款式好不好,看个人喜好了。我通常避免在条件语句中进行修改,但有时它可能很有用,甚至很优雅。

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

换句话说,++counter == 10 的计算可以如下进行

counter = counter + 1
result = (counter == 10)

或作为

result = ((counter + 1) == 10)
counter = counter + 1

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

关于c - 你认为这种糟糕的编码风格吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7261610/

相关文章:

MATLAB C/MEX 中的转换问题

c - 如何使用从c中的文件读取的文本打开文件

c - JSF( union 攻击战斗机)类似于 C 的标准

python - 如何在Python中以更简洁的方式传递多个参数

c - 驱动程序如何成为操作系统的一部分?

c - 在c中使用#pragma pack但无法理解

c - 在 C 程序 xCode 中包含 XML 多字符串

version-control - 提交消息应该用现在时还是过去时书写?

java - 一般对象的堆

unit-testing - 在我的单元测试中避免 try...catch...finally... 的最佳方法是什么?