宏定义 #和##

来源:互联网 发布:淘宝找同款功能不见了 编辑:程序博客网 时间:2024/05/16 02:19

讲解:

#字符串化的意思。出现在宏定义中的#是把跟在后面的参数转换成一个字符串

例如:
            > #define  FOO(arg)   my##arg
        则
            > FOO(abc)
        相当于   myabc

例如:
            > #define STRCPY(dst, src)   strcpy(dst, #src)
        则
            > STRCPY(buff, abc)
        相当于   strcpy(buff, "abc")

另外,如果##后的参数本身也是一个宏的话,##会阻止这个宏的展开,也就是只替换一次。

    #define STRCPY(a, b)    strcpy(a ## _p, #b)

 #define STRCPY(a, b)    strcpy(a ## _p, #b)    int main()    {        char var1_p[20];        char var2_p[30];         /* 注意这里 */        STRCPY(STRCPY(var1,var2),var2);        /* 这里是否会展开为: strcpy(strcpy(var1_p,"var2")_p,"var2“)?         * 答案是否定的:         * 展开结果将是:  strcpy(STRCPY(var1,var2)_p,"var2")         * ## 阻止了参数的宏展开!         * 如果宏定义里没有用到 # 和 ##, 宏将会完全展开         */    }  


0 0