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; }
本文详细解析了C语言中#和##宏定义的用法,包括#用于参数字符串化、##连接变量名的实例,并强调了注意事项,如只能用于常量而非变量值。通过实际代码演示,帮助理解这两个符号在宏定义中的关键作用。
704

被折叠的 条评论
为什么被折叠?



