#和##都是作用于其后面的宏参数。
1. #符号是一个预处理运算符,它可以把语言符号转化成字符串。例如,如果x是一个宏参量,那么#x可以把参数名转化成相应的字符串。该过程称为[b]字符串化[/b](stringizing)。
2. ##符号把两个语言符号组合成单个语言符号。(变量化?)例如:
#define XNAME(n) x##n
这样宏调用:
XNAME(4)
展开后:
x4
测试代码:
编译:gcc -o sharp sharp.c
运行:./sharp
x1 = 12
1. #符号是一个预处理运算符,它可以把语言符号转化成字符串。例如,如果x是一个宏参量,那么#x可以把参数名转化成相应的字符串。该过程称为[b]字符串化[/b](stringizing)。
2. ##符号把两个语言符号组合成单个语言符号。(变量化?)例如:
#define XNAME(n) x##n
这样宏调用:
XNAME(4)
展开后:
x4
测试代码:
// sharp.c
#include <stdio.h>
#define XNAME(n) x##n
#define PXN(n) printf("x"#n" = %d\n",x##n)
int main(void)
{
int XNAME(1)=12; //int x1=12;
PXN(1); //printf("x1 = %d\n", x1);
return 0;
}
编译:gcc -o sharp sharp.c
运行:./sharp
x1 = 12