“有人认为爱是性,是婚姻,是清晨六点的吻,是一堆孩子,也许真是这样的,莱斯特小姐。但你知道我怎么想吗,我觉得爱是想触碰又收回手。” ——塞林格 《破碎故事之心》
前两天看业务代码的时候看到了#号,因为自己从Python转过来,因此总觉得像在看注释。拖了几天,今天就来整理一下C/C++中的 # 与 ##。
下面内容整理自以下博客:
C语言宏与单井号(#)和双井号(##)
C/C++ 中##(两个井号)和#(一个井号)的意思
在C语言的宏中,# 的功能是将其后面的宏参数进行字符串化操作(Stringfication),简单说就是在对它所引用的宏变量通过替换后在其左右各加上一个双引号。
## 被称为连接符(concatenator),用来将两个Token连接为一个Token。注意这里连接的对象是Token就行,而不一定是宏的变量。比如你要做一个菜单项命令名和函数指针组成的结构体的数组,并且希望在函数名和菜单项命令名之间有直观的、名字上的关系。
由于宏涉及到编译的部分,该部分在编译原理中有较为详细的解释,此处就不赘述了。有兴趣的小伙伴可以去翻龙书~
举个简单的例子:
#define PRINT(n) printf("token" #n " = %d", game##n)
int token9 = 9;
int game9 = 99;
PRINT(9);
// 相当于:
printf("token9 = %d", game9);
//输出为:
token9 = 99
就酱,over~
网友评论