在C语言中,#和##是两个重要的预处理器操作符,它们在宏定义中发挥着关键作用:

1 操作符(字符串化操作符):

  • 操作符用于将宏参数转换为字符串常量。在宏定义中,当参数前面加上#时,预处理器会将参数转换为一个字符串。这对于生成调试信息、日志消息或者动态构建字符串是非常有用的。

  • 例如:

#define STR(x) #x
printf("%s\n", STR(Hello World)); // 输出 "Hello"

2 操作符(连接操作符):

  • 操作符用于连接两个标识符,形成一个新的标识符。这对于生成新的标识符或者动态生成函数名非常有用。

  • 例如:

#define CONCAT(x, y) x##y
int CONCAT(num, 1) = 10; // 实际上被展开为 int num1 = 10;