#define sqr(x) x*x
#define定义的指令允许带参数。例如,下面的定义也是合法的:
观察下面的这个程序:
程序输出:
为什么第二个输出的数是32不是144?不要忘了sqr中的x不是一个变量,编译器仅仅是把x替换为10+2,因此sqr(10+2)的结果是10+2*10+2,当然是32咯。为了避免这种情况,这样写就没问题了:
#define sqr(x) x*x
观察下面的这个程序:
#include <stdio.h>
#define begin {
#define end }
#define writeln(num) printf("%d\n",num)
#define sqr(x) x*x
int main()
begin
writeln(sqr(100));
writeln(sqr(10+2));
end
程序输出:
10000
32
为什么第二个输出的数是32不是144?不要忘了sqr中的x不是一个变量,编译器仅仅是把x替换为10+2,因此sqr(10+2)的结果是10+2*10+2,当然是32咯。为了避免这种情况,这样写就没问题了:
#define sqr(x) ( (x) * (x) )
本文出自 51CTO.COM技术博客