在一些项目中,我们会经常看到 某个宏定义中 有 "#XXX"的写法,或者 x##y的写法。
也就是说,# 和 ## 在宏定义中的作用是什么?
通过如下三个例子简单理解下:
# 解决了双引号中无法 替换的问题
#include <stdio.h>
//#define str(x) #x
#define str(x) "bbbbbbbbbbbb "#x" aaaaaaaaaaaa"
int main()
{
printf("%s\n", str(100)); //bbbbbbbbbbbb 100 aaaaaaaaaaaa
return 0;
}
## 解决了非双引号中粘连无法替换的问题
#include <stdio.h>
#define test(a) (a##a)
#define sum(a,b) (a##a+b##b)
int main()
{
printf("%d\n", sum(2, 3)); //55
printf("%d\n", test(2)); //22
return 0;
}
通过## 隐藏变量 的 声明和使用
#include <stdio.h>
#define XNAME(N) x##N
#define PRINT_XN(n) printf("x"#n" = %d\n", x##n)
int main()
{
int XNAME(1) = 14; // x1变量赋值为 14
int XNAME(2) = 20; // x2变量赋值为 20
printf("x1 = %d, x2 = %d\n", x1, x2);
PRINT_XN(1);
PRINT_XN(2);
return 0;
}