C语言中宏定义中#和##中作用
在宏定义中#和##的作用是:前者将宏定义的变量转化为字符串;后者将其前后的两个宏定义中的两个变量无缝拼接在一起。
1. #: 在宏定义中,将其后的变量,转化为字符串。
eg: #define str(s) #s
输出: helloworld , 就可以通过这样的的调用, printf( str(helloworld) );
2. ## : 在宏定义中,将其前后的两个变量拼接在一起。
eg: #define v(a,b,c,d) 0xa##b##c##d
//将四个字节的十六进制的数据转化为一个十六进制的整型数据
int a = v(CF,AB,B0,BC); // 即 a = 0xCFABB0BC
3. 两者的共性: 能够阻止宏定义的递归展开。可以通过中间的转换的宏,来实现参数宏的展开。
实例代码如下:
#include<stdio.h>
#define str(s) #s
#define v(a,b,c,d) 0x##a##b##c##d
int main(int argc,char* argv[])
{
int a;
printf(str(HelloWold!\n));
a = v(2f,bc,ff,8d);
printf("%d : %0x", a,a);
return 0;
}
运行结果: