问一个关于宏的问题
#include<stdio.h>#define CUBE(x)(x*x*x)
main()
{
int x,y;
x=5;
y=CUBE(++x);
printf("%d\n",y);
}
我看到书上说y的值应该是x自加三次后立方,即8*8*8=512,
但是我调试的时候结果却是392,为什么会是这个结果啊,望大虾们帮忙,谢谢!!
----------------解决方案--------------------------------------------------------
应该是336吧
CUBE(++x) 相当于, ((++x)*(++x)*(++x))
我们来一步一步算:x=5
((++x)*(++x)*(++x))
一:((6)*(++x)*(++x)) 这个时侯x=6
二:((6)*(7)*(++x)) 这个时侯x=7
三:((42)*(++x))
四:((42)*(8)) 这个时侯x=8
结果:336
----------------解决方案--------------------------------------------------------
呵呵,那为什么运行之后是392呢?我用的是gcc
----------------解决方案--------------------------------------------------------
我用的是TC2.0
按步骤就是这样的,
你能不能给出更好的解释?
----------------解决方案--------------------------------------------------------
我用tc运行出来的是512
----------------解决方案--------------------------------------------------------
楼主是不是用C-FREE,
----------------解决方案--------------------------------------------------------
#include<stdio.h>
#define CUBE(x) (x*x*x)
main()
{
int x;
clrscr();
x=5;
printf("%d\n",CUBE(++x));
getch();
}
结果:
336
----------------解决方案--------------------------------------------------------
include<stdio.h>
#define CUBE(x)(x*x*x)---------(++x)(++x*++x*++x)
main() ++运算符运算顺序是自右从左~
{ 就是乘法* 自己去看运算级别
int x,y; ((++x*++x)*++x)
x=5; 7*7*8=392
y=CUBE(++x);
printf("%d\n",y);
}
----------------解决方案--------------------------------------------------------
# include <stdio.h>
#define CUBE(x) (x*(x*x))
void main()
{
int x,y;
x=5;
y=CUBE(++x);
printf("%d\n",y);
}
是 512~~~
----------------解决方案--------------------------------------------------------
如果是:512
(++x*++x*++x)
++ 的优先级 比 * 高 就
把所的 ++ 做完再做 *
那就是(8*8*8)
----------------解决方案--------------------------------------------------------