我有以下代码,我希望输出是:
foo(0) -- 2 /* 1*2 */
foo(2) -- 12 /* 3*4 */
foo(4) -- 30 /* 5*6 */
但是我有
foo(2) -- 4
foo(4) -- 16
foo(6) -- 36
相反。有人可以向我解释发生了什么吗?
include <stdio.h>
int main()
{
int counter; /* counter for loop */
counter = 0;
while (counter < 5)
printf("foo(%d) -- %d\n", counter, ((++counter)*(++counter)));
return (0);
}
最佳答案
一旦你在一个变量上使用了++
——前缀或后缀——你就不能在同一个变量上再次使用它,直到下一个sequence point之后。 .如果这样做,代码的行为是未定义的——允许编译器做任何它想做的事。
您的代码中的两个 (++counter)
表达式之间没有序列点,因此您违反了这条规则。你必须写这样的东西,而不是:
while (counter < 5) {
printf("foo(%d) -- %d\n", counter, (counter+1) * (counter+2));
counter += 2;
}
关于c - 完全理解前缀自增(++)操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5812230/