运算符 ### 的用法

← C语言知识地图


# — 字符串化运算符

把宏参数变成字符串字面量(给参数加上双引号)。

#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) { ... }