1、
#define SQ(y) (y)*(y)
#include<iostream.h>
void main()
{
int a,sq;
cout<<"input a number:";
cin>>a;
sq=SQ(a+1);
cout<<"sq="<<sq<<endl;
}
当输入一个2时,可以看到结果:
2、
#define SQ(y) y*y
#include<iostream.h>
void main()
{
int a,sq;
cout<<"input a number:";
cin>>a;
sq=SQ(a+1);
cout<<"sq="<<sq<<endl;
}
当输入一个2时,可以看到结果:
3、
#define SQ(y) (y)*(y)
#include<iostream.h>
void main()
{
int a,sq;
cout<<"input a number:";
cin>>a;
sq=16/SQ(a+1);
cout<<"sq="<<sq<<endl;
}
当输入一个3时,可以看到结果:
4、
#define SQ(y) ((y)*(y))
#include<iostream.h>
void main()
{
int a,sq;
cout<<"input a number:";
cin>>a;
sq=16/SQ(a+1);
cout<<"sq="<<sq<<endl;
}
当输入一个3时,可以看到结果:
造成以上结果不同的原因是因为宏定义中的字符串代换只做符号代换而不作其他处理。
1中:sq=(a+1)*(a+1);
2中:sq=a+1*a+1;
3中:sq=16/(a+1)*(a+1);
4中:sq=16/SQ((3+1)*(3+1));