C语言,带参数的宏定义

Python010

C语言,带参数的宏定义,第1张

Power2(x)这个宏的意思是把x用x*x代替

在你程序里,出现在括号里的东西是i+j,那么编译器就会用

i+j*i+j

代码替换,如果是

#define

Power2(x)

(x)*(x),就会替换成(i+j)*(i+j),那么输出结果就是196。

同样,如果改成

#define

Power2(x)

x/x

那么代码就换替换成i+j/i+j,那么结果就是15。

宏只是字符的替换,在预处理阶段就给替换到代码中去了比如下面的代码

#include

#define

MAX(x,

y)

((x)>(y)?(x):y())

int

main()

{

int

a

=

2,

b

=

4

int

m

m

=

MAX(2,

4)

printf("%d\n",

m)

return

0

}

如果你用的是gcc编译器,执行

gcc

-E

main.c

-o

main.i,打开main.i文件就可以看到他是如何替换进去的,直接拖到最后,前面的都是stdio.h中的内容。

int

main()

{

int

a

=

2,

b

=

4

int

m

m

=

((2)>(4)?(2):4())

printf("%d\n",

m)

return

0

}

函数就不同了,函数还需要分配栈空间,在执行函数时都要进行入栈和出栈操作,有的还需要分配堆空间。

宏所实现的功能有限,而且长代码不易读,但是对于逻辑简单、代码不长、经常使用的功能由宏来实现是个不错的选择