在C++中,#的作用是将#后面的内容构成一个字符串,例如:
int main(int argc, char *argv[])
{
#define STR(x) #x
int a=3;
printf(STR(a));
return 0;
}
可以看到在命令行输出为字符串“a”,如下:
liyunlong@liyunlong:~/Test/dist$./test
a
所以在C++中#可以将一些变量名,函数名等直接生成字符串使用。
在C++中还有##也经常遇到,##的作用是将##前面与##后面的内容做连接,构成一个新的值,这个新的值不是一个字符串,例如:
#define MER(x1, x2) x1##x2
void TestFunc()
{
printf("TestFunc");
}
void Test()
{
printf("Test");
}
void Func()
{
printf("Func");
}
int main(int argc, char *argv[])
{
MER(Test, Func)();
return 0;
}
执行程序,可以看到是运行了TestFunc这个函数。
liyunlong@liyunlong:~/Test/dist$./test
TestFunc
所以在C++中我们可以用##来进行连接,组成一些方法名,变量名,或者类名来简化代码的写法。