c语言宏定义的理解

#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变量.

猜你喜欢

转载自blog.csdn.net/u010029439/article/details/88087041
今日推荐