关于C语言宏定义的技巧:'#'和'##'
'#'和'##'
'#'和'##'是两个预处理运算符,只能在预处理的过程中使用。在带参数的宏定义中,
可变参数
带参数的宏定义也是可以使用可变参数的;
#define SHOWLIST(...) printf(# __VA_ARGS__)
其中... 表示使用可变参数,__VA_ARGS__ 在于处理中被实际的参数集所替换。
#可以这样用
#include<stdio.h>
#define STR(s) # s //STR 就是定义的宏 ,# 运算符会将 s 变为字符串的形式
int main(void){
// printf("%s\n",STR(This is my time.));
printf(STR(Hellow %s num = %d\n),STR(This is my life.),520); //若传入的字符串中含有多个空格,输出时只会输出一个空格
return 0;
}
##可以这样用:
#include<stdio.h>
#define TOGETHER(x,y) x ## y
int main(void){
printf("%d\n",TOGETHER(13,14));
printf("%d\n",TOGETHER(5,20));
return 0;
}
可变参数可以这样用:
#include<stdio.h>
#define SHOWLIST(...) printf(# __VA_ARGS__)
int main(void){
SHOWLIST(I love it,123456,3.14159,bdsakjhdfc\n);
return 0;
}
可变参数也可以是空参数:
#include<stdio.h>
#define PRINTF(format,...) printf(# format,## __VA_ARGS__)
int main(void){
PRINTF(num = %d\n,520);
PRINTF(Hellow world!!!\n);
return 0;
}
|