【发布时间】:2012-05-06 23:20:59
【问题描述】:
我正在运行以下 C 代码:
#define cube(x) (x*x*x)
void main()
{
int x=2,y;
y=cube(++x);
printf("%d %d",++x,y);
}
我期待结果
6,60
但它给出了不同的结果。我想我对预处理器有误解。我认为代码将类似于
void main()
{
int x=2,y;
y=++x*++x*++x;
printf("%d %d",++x,y);
}
如果我错了,请纠正我。
我将结果解释为
3*4*5=60
但它即将到来 125
【问题讨论】:
-
你能解释一下为什么你期望这个结果吗?听起来您对 C 语言有误解,因为没有理由期待任何特定的结果。 (也许您将乘法发生的已定义顺序与要相乘的事物本身计算的未指定顺序混淆了?)
-
我是否遗漏了什么,当我在 Mac OSX Lion 中运行上述代码(第一个使用预处理器的代码)时,gcc 版本为 4.2.1,我得到的值是 6,60
-
@DavidSchwartz:据我所知,前缀增量是从右到左关联的,所以 ++x*++x*++x 即 3*4*5 将给出 60。
-
@SachinMhetre:我得到了 6,125 作为输出
标签: c pre-increment