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; }