@[TOC]# 和 ## 的使用
“#” 的使用
#是在宏定义中将参数进行字符串化的预处理特征,例如:
#include <iostream>
using namespace std;
#define P(EXP) cout<<#EXP<<":"<<EXP<<endl
int main()
{
int a=123;
float f=123.456;
P(a);
P(f);
P(1234);
return 0;
}
显示为:
a:123
f:123.456
1234:1234
“##”的使用
##是连接符,例如:
#include <iostream>
using namespace std;
#define V(x) var##x
int main()
{
int var1=123,var2=223,var3=323;
printf("%d\n",V(1));
printf("%d\n",V(2));
printf("%d\n",V(3));
return 0;
}
显示为:
123
223
323
注意:
当宏参数是另一个宏的时候,需要注意的是,凡宏定义里有用’#’或’##’的地方宏参数是不会再展开,看下面的例子:
#include <iostream>
using namespace std;
#define V(x) var##x
int main()
{
int p=1;
int var1=123,var2=223,var3=323;
printf("%d\n",V(p));
return 0;
}
这段代码无法通过编译
预处理的替换,只会做最简单的浅层替换