2017-07-15 83 views
0

这里很简单的C程序:后增量如何在c中工作?

int main() 
{ 
    int i = 22; 
    printf("%d %d %d",i,i++,i); 
    return 0; 
} 

结果是:

23 22 23 

究竟岗位增量是在这里工作?

+1

欢迎来到未定义的行为!这是一个神秘和痛苦的美妙之地。更多在这里:https://stackoverflow.com/questions/4176328/undefined-behavior-and-sequence-points – user4581301

+0

好点。 OP希望C. C和C++之间的规则有点不同,特别是在C++ 11之后。 – user4581301

回答

1

根据您得到的结果来判断i ++是否被评估并返回预增值。然后,i的值,i ++的返回值和i的值被传递给打印函数。

这不是你应该依赖的东西,因为你可能会在不同的编译器或不同的优化设置下得到不同的答案。如在另一个答案中,参数评估的顺序是未定义的行为。

2

在这种情况下,您无法正确测试。

函数参数的参数评估顺序未定义,因此您将获得平台相关的结果。

i ++的实际工作方式是首先返回旧值并稍后递增,但这是一个糟糕的测试。