首先,如果此论坛之前已经提出过这个问题,我想道歉。我搜索过,但无法找到类似的问题。
我是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。
任何帮助将不胜感激。
感谢您的时间。
答案 0 :(得分:4)
您的代码将调用未定义的行为。什么事情都可能发生。陈述中的宏
j = PRODUCT(i++);
k = PRODUCT(++i);
将扩展为
j = x++ * x++;
k = ++x * ++x;
在两个语句中,x
在两个序列点之间被多次修改。