“无论如何,遵循指南"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.
我知道++i
比i++
稍微快一点,但认为他们没有理由出错。我搜索了一段时间,最接近的是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
更容易推理,那么请随时接受建议,但这完全取决于个人和您的习惯。
我遇到了 this answer to this 个问题。在其中一行中,作者提到了:
In any case, follow the guideline "prefer
++i
overi++
" and you won't go wrong.
我知道++i
比i++
稍微快一点,但认为他们没有理由出错。我搜索了一段时间,最接近的是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
更容易推理,那么请随时接受建议,但这完全取决于个人和您的习惯。