【发布时间】:2018-05-03 06:29:59
【问题描述】:
我在 gcc 上运行我的 C 代码以了解前/后增量运算符。 然而,我看到的结果并不是我所期望的。就像第 6 行一样,因为 i 是 5,所以应该是
8 7 6 5 5
但它是8 7 6 5 8
然后到最后一行,它显示14 14 14 14。有人可以解释这种行为。我曾预料到
14 14 13 12
这个编译器是依赖的吗? printf函数在序列点上的行为是否未定义?
#include <stdio.h>
int main()
{
i = 5;
printf("%d %d %d %d %d \n", i, i++, i++, i++, i);
printf("%d \n", ++i);
printf("%d \n", ++i);
printf("%d \n", ++i);
printf("%d %d %d %d \n", i, ++i, ++i, ++i);
}
【问题讨论】:
-
这是未定义的行为。 C 标准不支持您的期望
-
无法解释,这是未定义的行为。您不能将同一变量的多个增量放入单个语句中。
-
故事的寓意:在 99% 的情况下避免前后增量。你的代码的读者会很感激的。
-
@aschepler:建议的副本是关于 C++ 的。我确定有一个关于 C 的副本,但我没有找到它。
-
@ShankhadeepMukerji 你会想要仔细阅读C11 Standard 6.5.2.4 Postfix increment and decrement operators
标签: c post-increment pre-increment