C中的预增量和后增量

时间:2016-04-15 19:51:09

标签: c

首先,如果此论坛之前已经提出过这个问题,我想道歉。我搜索过,但无法找到类似的问题。

我是C的初学者。我正在阅读一个教程并遇到一个代码,我无法理解的解决方案。

这是代码 -

#include <stdio.h>
#define PRODUCT(x) (x*x)

int main()
{
    int i=3, j, k;

    j = PRODUCT(i++);
    k = PRODUCT(++i);

    return 1;
}

我尝试通过编译器运行代码并获得解决方案&#34; j = 12&#34;和&#34; k = 49&#34;。

我知道#define是如何工作的。它用(x * x)代替每次出现的PRODUCT(x),但我不能理解的是j和k分别得到值12和49。

任何帮助将不胜感激。

感谢您的时间。

1 个答案:

答案 0 :(得分:4)

您的代码将调用未定义的行为。什么事情都可能发生。陈述中的宏

j = PRODUCT(i++);
k = PRODUCT(++i);  

将扩展为

j = x++ * x++;
k = ++x * ++x;  

在两个语句中,x在两个序列点之间被多次修改。