#define sqr(x) (x) * (x)
这一段代码的意思是说:sqr(x)的意思就是x的平方,而以后出现的sqr(x)就用(x) * (x)替换。
宏定义在编译时会替换程序中的内容,是直接替换,不改变优先级。
例1:
#define SUB(a) (a) - (a)
void main(){
int a = 2, b = 3, c = 5, d;
d = SUB(a + b)*c;
printf("%d\n", d);
}
输出-20;
SUB(a + b)*c; 替换为(a+b)-(a+b)*c
sub(a)是等于(a)-(a)。
这两个a外面有括号的,a是等于a+b的,
所以得到sub(a)为(a+b)-(a+b),
然后再结合*c,即(a+b)-(a+b)*c
例2:
#define MAX(x,y) (x)>(y)?(x):(y)
void main() {
int a = 5, b = 2, c = 3, d = 3, t;
t = MAX(a + b, c + d) * 10;
printf("%d", t);
}
宏定义并非函数,只是单纯地语言替换;
MAX(a + b, c + d) * 10;
替换为(a+b)>(c+d)?(a+b):(c+d)10
带入a = 5, b = 2, c = 3, d = 3,
即(5+2)>(3+3)? (5+2) :(3+3)*10;
答案7,,
若前者大输出7,,,若后者大输出6*10