#include到底该写在哪

本文通过实际案例解析了C/C++中头文件包含的常见误区,即在.cpp文件中包含了所有依赖头文件而非.h文件中,导致编译时出现大量错误。作者最终意识到在.h文件中正确地包含依赖头文件的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 大学学C/C++的时候,大家写.h文件的时候,发现有符号这个文件里没有,就会#include相关的头一下;写.cpp文件的时候,发现有符号这个文件里没有也会#include一下,一直没有出什么问题。

2. 再晚些知道了#include是预编译,就是copy一个文件的全部内容到当前#include语句的位置而已,而编译器根本不去编译.h,以及他里面到底是啥。

然后隔了很久没用C/C++做很较复杂的程序,直到今天……封装整个DirectDrawManager的时候,我SB了。

我想:“反正.h不去编译,我就把.cpp和.h里面要用的符号的#include语句都写在.cpp里,然后在这些#include的下面来#include 自己.h不就行了么。这样会先把相关的符号声明都加载进来,然后粘贴上我的.h文件,那么编译时,也不会出错,而且这样我感觉一下子对#include了哪些头非常清楚,因为都在.cpp里了,.h里啥也不#include。”

接着我编译了上面这种的.cpp文件,成功,哇好爽!

然后我build整个项目,一共好几百个错误,哇好爽!

SB的我想:“.cpp过了啊,而且没有未定义与重复定义呀?!难道我记错了…….h也要检查不成?!”

于是将所有在.cpp里#include的语句都放在了自己的.h文件里(除了#include "自己.h"),build成功!

哈哈哈,果然是我记错了!

SB!我从脑后突然传来一个下意识的声音~“预编译就是预编译,怎么TMD可能去检查.h!你就是个SB,还美呢!”

为了不被自己的良心谴责,我继续尝试修改各种方式,终于,我发现了自己的SB之处,也可以给出了本文标题的答案。

#include就是拷贝一块文件进来,在.cpp里面写这个类相关的头的#include,这个.cpp是没问题了,可关键是其他用这个类的文件,如果#include这个类的头文件,但是因为这个类的头文件里没有引用这个头文件相关的其他类的头文件,就会在编译使用者时出现找不到符号的错误。

所以在.h里有依赖性的符号,就应该在.h里#include的,在.cpp里有依赖性的符号,就在.cpp里写#include。
这样当#include拷贝一块文件过来时,才会将相关依赖的符号也都拷贝进来。

自我检讨完毕!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值