当前位置: 首页 > news >正文

#include到底该写在哪

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拷贝一块文件过来时,才会将相关依赖的符号也都拷贝进来。

自我检讨完毕!

相关文章:

  • ANDROID模拟器访问本地WEB应用10.0.2.2
  • 两道考研试题
  • Windows_CMD_临时环境变量
  • linux0.11内核源码剖析:第一篇 内存管理、memory.c
  • js中||和优先级问题
  • 过渡到J2EE
  • php的几种运行模式CLI、CGI、FastCGI、mod_php
  • 《新华书目报》对我的整版报道
  • UISlider
  • Java Swing 在JTable里增加动态数据的下拉框
  • JavaScript常用函数总结
  • Mybatis Collection查询集合只出现一条数据
  • Navicat For MySql 9.1
  • codevs1297 硬币
  • 好久没更新了
  • (三)从jvm层面了解线程的启动和停止
  • 【Amaple教程】5. 插件
  • dva中组件的懒加载
  • Go 语言编译器的 //go: 详解
  • gulp 教程
  • JavaScript标准库系列——Math对象和Date对象(二)
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • Magento 1.x 中文订单打印乱码
  • Node + FFmpeg 实现Canvas动画导出视频
  • PAT A1017 优先队列
  • windows下mongoDB的环境配置
  • 闭包,sync使用细节
  • 创建一个Struts2项目maven 方式
  • 读懂package.json -- 依赖管理
  • - 概述 - 《设计模式(极简c++版)》
  • 回顾 Swift 多平台移植进度 #2
  • 力扣(LeetCode)21
  • 前端知识点整理(待续)
  • 前嗅ForeSpider采集配置界面介绍
  • 微信小程序:实现悬浮返回和分享按钮
  • 小程序开发之路(一)
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (ibm)Java 语言的 XPath API
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • ... 是什么 ?... 有什么用处?
  • .htaccess配置常用技巧
  • .NET Core 中插件式开发实现
  • .NET企业级应用架构设计系列之结尾篇
  • .net之微信企业号开发(一) 所使用的环境与工具以及准备工作
  • .pub是什么文件_Rust 模块和文件 - 「译」
  • // an array of int