C/C++宏定义中#与##区别
- // #表示:对应变量字符串化 (把变量名(也就是(变量)标识符)转化为字符串)
- // ##表示:把宏里的参数名(即(变量)标识符)与宏定义代码序列中的(变量)标识符连接在一起,形成一个新的(变量)标识符
- #include <stdio.h>
- #define trace(x, format) printf(#x " = %" #format "\n", x)
- #define trace2(i) trace(x##i, d)
- int main()
- {
- int i=1;
- char *s="three";
- float x=2.0;
- trace(i, d); // 相当于 printf("i = %d\n", i)
- trace(x, f); // 相当于 printf("x = %f\n", x)
- trace(s, s); // 相当于 printf("s = %s\n", s)
- int x1=1, x2=2, x3=3;
- trace2(1); // 相当于 trace(x1, d)
- trace2(2); // 相当于 trace(x2, d)
- trace2(3); // 相当于 trace(x3, d)
- return 0;
- }