我的代码。
#include <stdio.h>
#define PRODUCT(x) (x * x)
int main()
{
int i = 3, j, k, l;
j = PRODUCT(i + 1);
k = PRODUCT(i++);
l = PRODUCT(++i);
printf("%d %d %d %d", i, j, k, l);
return 0;
}
我无法理解为什么输出的是:
7 7 12 49.
是宏有问题还是其他问题?
你的宏不正确。下面的表达式。
PRODUCT(i+1)
将展开为
(i+1 * i+1)
也就是 2*i+1
.
你的宏应该是。
#define PRODUCT(x) ((x)*(x))
我强烈建议你不要再用宏来做这种事了。你可以很容易地把它写成一个函数。
int product(int x)
{
return x * x;
}
注意,这只适用于我举的例子。如果你尝试
PRODUCT(i++)
你会得到
( (i++) * (i++) )
的行为,因为这个表达式在两个增量之间缺少一个序列点。
您的代码有未定义的行为,在 i
:
k=PRODUCT(i++);
l=PRODUCT(++i);
至于。
j=PRODUCT(i+1);
它扩大到 i+1*i+1
也就是 i+i+1
也就是 7
. 我想这应该不是预期的结果吧,以后在你的问题中也要包括这一点。