预处理
内容简介
预处理发生在正式编译之前,主要处理 #include、宏定义、条件编译和头文件保护。C/C++ 的典型构建流程是:预处理 -> 编译 -> 汇编 -> 链接。
用法
include
#include <stdio.h> // 系统或标准库头文件
#include "my_header.h" // 当前项目头文件宏定义
#define MAX_COUNT 100
#define MAX(a, b) ((a) > (b) ? (a) : (b))条件编译
#ifdef DEBUG
printf("debug mode\n");
#endif头文件保护
#ifndef MY_HEADER_H
#define MY_HEADER_H
void func(void);
#endif或使用:
#pragma once最佳代码实践
- 项目头文件使用双引号,标准库头文件使用尖括号。
- 头文件必须有防重复包含机制。
- 宏常量在 C++ 中优先替换为
constexpr或const。 - 有参数宏要给参数和整体表达式加括号。
#define SQUARE(x) ((x) * (x))错误用法
#define SQUARE(x) x * x
int value = SQUARE(1 + 2); // 展开为 1 + 2 * 1 + 2,结果错误#include "stdio.h" // 不一定错误,但标准库头文件更推荐用 <stdio.h>注意事项
- 宏是文本替换,没有类型检查,调试也不如函数方便。
- C++ 中有参宏通常可以用
inline函数、模板或constexpr替代。 #pragma once很方便,但严格说不是 C/C++ 标准的一部分;主流编译器基本都支持。
编译详情:CandCpp底层知识 > 编译原理
学习路径
- 上一节:CandCpp结构体
- 当前阶段:CandCPP基础
- 下一节:CandCPP文件操作