在一些项目中,我们会经常看到 某个宏定义中 有 "#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; }