我有以下代码,我希望输出是:
foo(0) -- 2 /* 1*2 */
foo(2) -- 12 /* 3*4 */
foo(4) -- 30 /* 5*6 */
Run Code Online (Sandbox Code Playgroud)
但我有
foo(2) -- 4
foo(4) -- 16
foo(6) -- 36
Run Code Online (Sandbox Code Playgroud)
代替.有人可以向我解释发生了什么吗?
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);
}
Run Code Online (Sandbox Code Playgroud)
zwo*_*wol 13
一旦你++对变量使用了- 前缀或后缀 - 就不能在同一个变量上再次使用它,直到下一个序列点之后.如果这样做,代码的行为是未定义的 - 编译器可以做任何想做的事情.
(++counter)代码中的两个表达式之间没有序列点,因此您违反了此规则.你必须写这样的东西,而不是:
while (counter < 5) {
printf("foo(%d) -- %d\n", counter, (counter+1) * (counter+2));
counter += 2;
}
Run Code Online (Sandbox Code Playgroud)