宏展开中含有#或者##

来源:互联网 发布:淘宝我的工作台在哪里 编辑:程序博客网 时间:2024/06/05 02:16
#include <stdio.h>
#define f(a,b) a##b
#define g(a)  #a
#define h(a) g(a)
 
int main()
{
        printf("%s\n", h(f(1,2)));
        printf("%s\n", g(f(1,2)));
        return 0;

}

宏展开中含有#或者##那么久不回展开参数,没有才会先展开参数,再展开当前宏。

得到

前者:12

分析:h中不含有#,所以展开f(1,2),  得到了12,变为h(12),变为了g(12),得到了"12"

后者:f(1,2)

分析:g中含有#,直接不展开f(1,2)了,输出"f(1,2)"

0 0
原创粉丝点击