#define i++, ++i 的问题

来源:百度知道 编辑:UC知道 时间:2024/07/04 04:43:08
#include "iostream.h"
#define f(x) x*x

void main()
{
int a=3,p,q;
p=f(a++);
q=f(++a);
cout<<p<<endl;
cout<<q<<endl;
}

输出是什么?为什么

输出:
9
49
原因:++a作用是使用a之前,先使a值增加1;a++作用是使用a之后,使a值增加1。也就是说在此程序中a++这个表达式第一次出现时值为3。p=f(a++)等价于p= (a++)*(a++),在执行这条语句时,编译系统首先会使用a++的值,计算得到p=9,然后将a自加1进行两次,此时a=5。q=f(++a)等价于q=(++a)*(++a),在执行这条语句之前,a先自加1进行两次,此时a=7,执行这条语句之后,q=49。

9
49
看一下汇编:
f(a++):
p = a * a;
a = a + 1;
a = a + 1;

f(++a):
a = a + 1;
a = a + 1;
q = a * a

#define f(x) x*x

改为

#define f(x) ((x)*(x))

宏只是一个替换的过程而已 ,你自己把所有的X换成A++ ++A 你就明白为什么错了
这个过程是在编译的时候就已经做了