6 4 月 2026, 周一

C 语言的宏替换由 预处理器(Preprocessor) 负责,它会在 编译前 进行文本替换。

基本使用

#include <stdio.h>

#define PI 3.14159  // 宏定义

int main() {
    printf("PI = %f\n", PI);
    return 0;
}

预处理后的代码

#include <stdio.h>

int main() {
    printf("PI = %f\n", 3.14159);
    return 0;
}

PI 被预处理器替换为 3.14159,这发生在预编译阶段。

宏替换的高级用法

(1)带参数的宏

#define SQUARE(x) ((x) * (x))

int main() {
    printf("5² = %d\n", SQUARE(5)); // 25
}

预处理后:

printf("5² = %d\n", ((5) * (5))); // 25

(2)字符串拼接

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

预处理后:

printf("%s\n", "Hello");

(3)拼接标识符

#define CONCAT(a, b) a##b
int CONCAT(num, 1) = 10; // 等价于 int num1 = 10;

预处理后:

int num1 = 10;
Avatar photo

sion932