title: C语言宏定义中# 和## 的使用
# 的用法——参数字符串化
宏定义中# 的作用就是取变量名的字符串形式
demo for #
#define one(var) #var
int main()
{
int nVar = 1;
cout << "#var = (" << one(nVar) << ')' << endl;
}
输出如下所示:
?#var = (nVar)
?请按任意键继续. . .
demo for #
编译前:
#include <stdio.h>
#define P(EXP) printf("%s %d\n", #EXP, EXP)
int main()
{
int a=123;
P(a);
return 0;
}
编译后:
#define P(EXP) printf("%s %d\n", #EXP, EXP)
int main()
{
int a=123;
printf("%s %d\n", "a", a);
return 0;
}
## 的用法——连接符
## 的作用是连接变量名
demo for ##
#define _double(var) nVar##1
int main()
{
int nVar1 = 1;
cout << "nvar##1 = (" << _double(1) << ')' << endl;
}
输出如下所示:
?nvar##1 = (1)
?请按任意键继续. . .
demo for ##
编译前:
#include <stdio.h>
#define V(x) var##x
int main()
{
int var1=123,var2=222,var3=321;
printf("%d\n",V(1));
printf("%d\n",V(2));
printf("%d\n",V(3));
return 0;
}
编译后:
#define V(x) var##x
int main()
{
int var1=123,var2=222,var3=321;
printf("%d\n",var1);
printf("%d\n",var2);
printf("%d\n",var3);
return 0;
}
需要注意的是
只能使用常量,不能使用变量的值,宏也不会进行展开操作
以下为错误操作:
#include <stdio.h>
#define V(x) var##x
#define P 1
int main()
{
int var1=123,var2=222,var3=321;
printf("%d\n",V(P));
return 0;
}
#include <stdio.h>
#define V(x) var##x
int main()
{
int P=1;
int var1=123,var2=222,var3=321;
printf("%d\n",V(P));
return 0;
}
|