粘合剂的总结"/>
关于C语言中 # 和 ##字符粘合剂的总结
C语言中在使用宏定义有时会碰到对同一种功能函数的多次定义的情况,在这种情况下如果多次写同样的函数,明显太low了,C语言推荐粘合剂功能以供使用。
简单总结记录一下
一、# 的使用
如果我们在宏定义时,希望显示出宏定义参数,则可以如下使用
先定义宏:
#define PRINT(x) \
do{ \
printf("get "#x" double = %d\n",x*x); \
} while(0)
调用:
PRINT(8);
输出:
get 8 double = 64
二、## 粘合剂的使用
如果我们想定义两个函数,例如:
show_my_info_sun(void)
{
char tmp[64]={0};
snprintf(tmp,sizeof(tmp),"this is %s","my sun");
printf("result = %s\n",tmp);
return 0;
}
int show_my_info_month(void)
{
char tmp[64]={0};
snprintf(tmp,sizeof(tmp),"this is %s","my month");
printf("result = %s\n",tmp);
return 0;
}
这两个函数中,只有sun、month两个字符一样的,内部实现就是根据sun和month两个关键字的实现不一样,如若存在多个和sun、month一样的类型,定义出多个这中函数显然不合适,
因此可以采用 ## 粘合剂的方式做宏定义,
示例:
定义宏
#define CALL_MY_FUNC(x) \
int show_my_info_##x(void) \
{ \
char tmp[64]={0}; \
\
snprintf(tmp,sizeof(tmp),"this is %s","my "#x); \
\
printf("result = %s\n",tmp); \
\
return 0; \
} \
show_my_info_##x();\
调用宏定义:
CALL_MY_FUNC(sun);
CALL_MY_FUNC(month);
采用这种方式只需要定义多个CALL_MY_FUNC即可
更多推荐
关于C语言中 # 和 ##字符粘合剂的总结
发布评论