#, ##

#和##都是作用于其后面的宏参数。

1. #符号是一个预处理运算符,它可以把语言符号转化成字符串。例如,如果x是一个宏参量,那么#x可以把参数名转化成相应的字符串。该过程称为 字符串化(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

你可能感兴趣的:(#)