请教#define的用法

#include<iostream>
using namespace std;
#define ss(n) ((n)*(n))
void main(void)
{
int i=2;
while(i<=10)
{
printf("%d\n",ss(++i));
}
system("pause");
}

为什么是16 36 64 100 144

当i=2(小于等于10)时,调用ss宏定义“ss(++i)” -> ((++i)*(++i))
3 4 ---> 所以结果就是4*4等于16呀
当i=4(小于等于10)时,调用ss宏定义“ss(++i)” -> ((++i)*(++i))
5 4 6 ---> 所以结果就是6*6等于36呀
当i=6(小于等于10)时,调用ss宏定义“ss(++i)” -> ((++i)*(++i))
7 8 ---> 所以结果就是8*9等于64呀

当i=8(小于等于10)时,调用ss宏定义“ss(++i)” -> ((++i)*(++i))
9 10 ---> 所以结果就是10*10等于100呀
当i=10(小于等于10)时,调用ss宏定义“ss(++i)” -> ((++i)*(++i))
11 12 ---> 所以结果就是12*12等于144呀
当i = 12时,大于了10,所以就退出了循环

记住了,宏编译是就是机械得替换了,不进行任何计算的来自:求助得到的回答
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-01-07
准备的说是替换成((n)*(n)) 。 宏定义在c程序编译时将宏名替换成字符串。这样做可以见名知意,还有这个变量如果要更换数值,只需要修改一处就可以了。
首先第一次进入循环的时候i=2,然后开始执行((++i)*(++i)) ,首先括号的优先级高,先执行第一个++i后i=3,再计算后面括号里面的++i后i=4,则第一次输出为4*4=16;现在i=4了,再次进入循环,执行上述步骤,得到6*6=36。以此类推。
第2个回答  2013-01-07
这里就是说:ss(n)=n*n
把代码中的所有出现ss(n)的地方都替换成n*n.
相当于生成了一个函数
相似回答