#:
将宏定义中的传入参数名转换成用一对双引号括起来参数名字符串
#define output(a) cout << #a << endl;
output(abc) // cout << "abc" << endl; -> abc
## :
防止传入的参数继续宏展开
#define cpy(a,b) strcpy(a##_p,b);
cpy(cpy(a,c),b) -> strcpy(cpy(a,c)_p,b)
而不是strcpy(strcpy(a_p,c)_p,b)
#@ :
将宏定义中的传入参数名转换成用一对单引号括起来参数名字符
#define output(a) cout << #a << endl;
output(x) // cout << 'x' << endl; -> x
\ :
续行