#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;
#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)"