在C语言中,#和##是用来操作宏定义中参数的特殊符号。
#(字符串化运算符):将参数转换为一个字符串常量。
例如:
#define STR(x) #x
STR(hello world) // 将会被转换为 "hello world"
##(连接运算符):用于将两个参数连接成一个符号。例如:
#define CONCAT(x, y) x##y
int CONCAT(a, b) = 10;
// 上面这一行宏定义等价于以下代码
// int ab = 10;
需要注意的是,## 运算符只能用于连接形参,在定义宏时不能使用##运算符连接文本。
// 这样是无法通过编译的
#define MY_MACRO(x) x##world
MY_MACRO(hello) // 等价于 helloworld
// 应该这样定义
#define MY_MACRO(x) my_ ## x ## _world
MY_MACRO(hello) // 等价于 my_hello_world
注:上述示例中的宏定义只是为了说明 # 和 ## 运算符的用法,实际中可能存在更多的边界情况和注意事项需要注意。