使用宏的一个经典例子是求一个数的平方,如下所示:
#include <iostream>
using namespace std;
#define SQ(y) y*y
int main(){
int n, sq;
cin>>n;
sq = SQ(n);
cout<<sq<<endl;
return 0;
}
运行结果:
9↙
81
从表面上看这个宏定义是正确的,但当我们将宏调用 SQ(n) 换成 SQ(n+1) 后,就会出现意想不到的状况:
#include <iostream>
using namespace std;
#define SQ(y) y*y
int main(){
int n, sq;
cin>>n;
sq = SQ(n+1);
cout<<sq<<endl;
return 0;
}
运行结果:
9↙
19
我们期望的结果是 100,但这里却是 19,两者大相径庭。这是因为,宏展开仅仅是字符串的替换,不会进行任何计算或传值,上面的