“无论如何,遵循指南"prefer ++i over i++",你就不会出错。” C中这背后的原因是什么?

'In any case, follow the guideline "prefer ++i over i++" and you won't go wrong.' What is the reason behind this in C?

我遇到了 this answer to this 个问题。在其中一行中,作者提到了:

In any case, follow the guideline "prefer ++i over i++" and you won't go wrong.

我知道++ii++稍微快一点,但认为他们没有理由出错。我搜索了一段时间,最接近的是this。它清楚地解释了为什么更喜欢使用 ++i,但仍然没有解释使用 i++.

怎么会出错

谁能告诉我 i++ 怎么会出错?

注意:我的问题不是骗人的,因为我不是在问性能。我已经看到那个问题了。我在问i++怎么会像我上面提到的答案中提到的那样是错误的。

for (i=start; i<end; i++)

for (i=start; i<end; ++i)

它们的含义完全相同,因为表达式i++++i的值没有被使用。 (它们仅针对副作用进行评估。)任何为两者生成不同代码的编译器在病态上都是糟糕的,应该扔进垃圾箱。在这里,使用您喜欢的任何形式,但 i++ 是 C 程序员的惯用语。

在其他情况下,使用产生所需值的形式。如果您想要增量之前的值,请使用 i++。这对以下内容有意义:

index = count++;

array[count++] = val;

count 的旧值成为您要存储内容的新插槽的索引。

另一方面,如果你想要增量后的值,使用++i

注意对于整型,下面的都是完全等价的:

  • i += 1
  • ++i
  • i++ + 1

同样以下是等价的:

  • (i += 1) - 1
  • i++
  • ++i - 1

对于浮点和指针,它更复杂。

就任何 objective 原因而言,您找到的建议都是胡说八道。另一方面,如果您发现 ++i 更容易推理,那么请随时接受建议,但这完全取决于个人和您的习惯。