在C语言中,有一些特殊的宏:
x##y 表示连接x和y
*#x 表示将x转化成字符
#x 表示将x转化成字符串
运行结果:
x##y 表示连接x和y
*#x 表示将x转化成字符
#x 表示将x转化成字符串
下面是一个例子:
#include <stdio.h>
#define conn(x,y) x##y
#define to_char(x) *#x
#define to_string(x) #x
int main()
{
int x=5, y=10, xy=20;
int n, m;
char c1, c2, *s;
n = conn(123, 456);
m = xy + conn(x, y);
c1 = to_char(1);
c2 = to_char(123);
s = to_string(abc123);
printf("conn(123, 456) = %d\n", n);
printf("m=%d\n", m);
printf("to_char(1)=%c\n", c1);
printf("to_char(123)=%c\n", c2);
printf("to_string(abc123)=%s\n", s);
return 0;
}
运行结果:
[linlin@mylinux7 Base]$ gcc -g -o macro macro.c
[linlin@mylinux7 Base]$ ./macro
conn(123, 456) = 123456
m=40
to_char(1)=1
to_char(123)=1
to_string(abc123)=abc123
[linlin@mylinux7 Base]$