运算符 # 与 ## 的用法
# — 字符串化运算符
把宏参数变成字符串字面量(给参数加上双引号)。
#include <stdio.h>
#define PRINT_INT(var) printf(#var " = %d\n", var)
int main() {
int score = 95;
int age = 18;
PRINT_INT(score); // 预编译后:printf("score" " = %d\n", score);
PRINT_INT(age); // 预编译后:printf("age" " = %d\n", age);
return 0;
}相邻字符串字面量会被编译器自动拼接("score" " = %d\n" → "score = %d\n")。
## — 记号拼接运算符
把两个记号无缝粘合成一个新记号(变量名、函数名等)。
#include <stdio.h>
#define MAKE_VAR(name, index) name##index
int main() {
int MAKE_VAR(num, 1) = 10; // 预编译后:int num1 = 10;
int MAKE_VAR(num, 2) = 20; // 预编译后:int num2 = 20;
printf("%d, %d\n", num1, num2);
return 0;
}也可以批量生成不同入参类型的同名函数:
#define MAKE_FUNC(type) \
void print_##type(type value) { \
/* 省略打印逻辑 */ \
}
MAKE_FUNC(int) // 生成 void print_int(int value) { ... }
MAKE_FUNC(float) // 生成 void print_float(float value) { ... }