宏定义在C/C++中使用的非常多,一方面定义一些常量,另一方面定义一些通用函数,但是很多带# 或## 的宏定义实现较为复杂。
C++宏定义中“#”与“##”的区别
1.#
是“字符串化”的意思,宏定义中的#表示将后面的宏参数转化成字符串常量。如:
例1
#define paster(n)printf("token" #n" = %d\n ",token##n)
//paster(6)即相当于printf("token 6 = %d\n",token6)
例2
#include <iostream>
#define ToString(x) #x
using namespace std;
int main(int argc, char *argv[])
{
cout<<ToString(xxx)<<endl;
system("pause");
return 0;
}
输出结果为:
2.宏定义里##
是一个连接符号,表示把字符串连在一起。
例1
#include <iostream>
#define CAT(x,y) x##y
int main()
{
char helloworld[] = "hi, hello world!";
printf("%s", CAT(hello, world));
system("pause");
return 0;
}
输出结果为:
例2
#include <iostream>
#define CAT(x,y) x##y
using namespace std;
void xy() {
cout << "hi, hello world!" << endl;
}
int main()
{
CAT(x, y)();
system("pause");
return 0;
}
输出结果为: