参考 https://blog.csdn.net/baidu_33850454/article/details/79363033
1个是变成字符串
#define STR(s) #s
printf("int max: %s\n" STR(abc));
// 等效于 printf("int max: %s\n" "abc" );
2个是连接起来形成新字符串,如果连接中的是宏定义中变量值,则展开,不是的则作为普通字符处理,比如
#define CONS(ab) int(a##e##b)
则
CONS(105) ;
// 展开为 int( "10e5" )