在一些項目中,我們會經常看到 某個宏定義中 有 "#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;
}