#include <stdio.h>
#include <stdlib.h>
#define FUNC_MACRO(flg) \
do{ \
int t_a = 10; \
if( !!flg) { \
t_a ++; \
flg = t_a; \
} \
printf("in macro, flg:= %d, t_a:= %d \n", flg, t_a); \
}while(0)
void func()
{
int t_a =100;
int flg =1;
FUNC_MACRO(flg);
printf("outof macro flg := %d \n", flg);
}
int main(int argc, char *argv[])
{
func();
return 0;
}
输出结果:
in macro, flg:= 11, t_a:= 11
outof macro flg := 11
总结:
1.宏定义内的变量与外部无关.(我们在函数中和宏内部分别定义了t_a,未发现冲突)
2.与函数调用不同,宏定义的使用又可以称作宏展开
如果我们定一个函数,以传参的方式把变量flg传入被调函数,背调函数使用的是flg的副本,不论在被调函数中怎么操作,都不会影响调用函数中flg的值.
但是如果我们使用宏定义,会直接操作flg变量.