0

0

C++头文件包含机制解释_C++ include工作方式详解

舞夢輝影

舞夢輝影

发布时间:2025-12-22 12:52:39

|

452人浏览过

|

来源于php中文网

原创

include是预处理器指令,将头文件内容原样插入;需用#ifndef或#pragma once防重复包含;头文件应自完备、明确依赖、只声明不定义实现。

c++头文件包含机制解释_c++ include工作方式详解

头文件包含不是简单的文本复制粘贴,而是一套由预处理器驱动、受路径规则和重复保护影响的编译前期机制。

include的本质是预处理指令

#include 是 C++ 预处理器(preprocessor)指令,发生在编译器真正解析语法之前。它会让预处理器把指定文件的**全部内容原样插入**到当前行的位置,不加判断、不改逻辑、不检查类型。

  • #include :从标准库路径查找,通常对应系统或编译器自带的头文件(如 /usr/include/c++/11/vector
  • #include "myheader.h":先在当前源文件所在目录找,找不到再按系统路径搜索,适合项目内自定义头文件

头文件为什么需要防止重复包含

一个头文件被多个源文件包含,或被其他头文件间接包含多次,会导致符号重定义错误(比如类重复声明、const 变量重复定义)。预处理器本身不会去重,必须靠人工防护。

  • #ifndef MYHEADER_H / #define MYHEADER_H / #endif 包裹头文件内容(传统卫士宏)
  • 现代写法直接用 #pragma once(非标准但主流编译器都支持,更简洁)
  • 两者效果等价:确保该头文件内容在单个翻译单元中只展开一次

包含顺序和依赖关系很重要

头文件之间有隐含依赖。例如 A.h 用到了 B.h 中定义的类,那么 A.h 必须在自身内部 #include "B.h",不能指望使用者“手动补全”。否则:

Smart Picture
Smart Picture

Smart Picture 智能高效的图片处理工具

下载

立即学习C++免费学习笔记(深入)”;

  • 单独编译包含 A.h 的源文件会失败(找不到 B 的定义)
  • 头文件应尽量自完备(self-contained),即能独立编译通过
  • 避免在头文件里用 using namespace std;,防止污染包含者的命名空间

头文件里该放什么、不该放什么

头文件是接口契约,不是实现仓库。

  • ✅ 放:类声明、函数声明、模板定义、内联函数、constexpr 变量、类型别名(typedef / using)
  • ❌ 不放:非 inline 的函数定义、全局变量定义(除非 extern 声明)、静态局部变量、普通变量初始化
  • ⚠️ 模板例外:因为实例化需在编译期完成,模板声明和定义通常都得放在头文件里

基本上就这些。理解 include 是预处理行为、学会用防护机制、理清依赖、守住头文件职责边界——C++ 头文件就能稳稳工作。

相关专题

更多
typedef和define区别
typedef和define区别

typedef和define区别在类型检查、作用范围、可读性、错误处理和内存占用等。本专题为大家提供typedef和define相关的文章、下载、课程内容,供大家免费下载体验。

107

2023.09.26

define的用法
define的用法

define用法:1、定义常量;2、定义函数宏:3、定义条件编译;4、定义多行宏。更多关于define的用法的内容,大家可以阅读本专题下的文章。

335

2023.10.11

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

523

2023.09.20

全局变量怎么定义
全局变量怎么定义

本专题整合了全局变量相关内容,阅读专题下面的文章了解更多详细内容。

77

2025.09.18

python 全局变量
python 全局变量

本专题整合了python中全局变量定义相关教程,阅读专题下面的文章了解更多详细内容。

96

2025.09.18

typedef和define区别
typedef和define区别

typedef和define区别在类型检查、作用范围、可读性、错误处理和内存占用等。本专题为大家提供typedef和define相关的文章、下载、课程内容,供大家免费下载体验。

107

2023.09.26

c语言typedef的用法
c语言typedef的用法

c语言typedef的用法有定义基本类型别名、定义结构体别名、定义指针类型别名、定义枚举类型别名、定义数组类型别名等。本专题为大家提供typedef相关的文章、下载、课程内容,供大家免费下载体验。

96

2023.09.26

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1019

2023.10.19

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

0

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Django 教程
Django 教程

共28课时 | 3.1万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.1万人学习

Sass 教程
Sass 教程

共14课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号