c++源文件和头文件问题

qq_36251364 2016-11-01 04:03:31
读工程代码时,遇到部分源文件只有一句语句
如DBIn.cpp中只有一句: #include "DBIn.h" 有点不懂这个源文件此时的含义
我删除了这个源文件进行编译,结果提示错误了,但是我看也有头文件单独存在不对应源文件的情况,却不会报错。
想问:这类型源文件的含义是什么?还有什么情况下可以不写源文件?
...全文
220 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-11-04
  • 打赏
  • 举报
回复
理解讨论之前请先学会如何观察! VC编译选项加/EP /P(项目、属性、配置属性、C/C++、预处理器、预处理到文件:是,预处理取消显示行号:是),重新编译,查看宏展开后对应的.i文件。gcc加-E http://bbs.csdn.net/topics/391003898
FredHuang85 2016-11-04
  • 打赏
  • 举报
回复
读工程代码时,遇到部分源文件只有一句语句 如DBIn.cpp中只有一句: #include "DBIn.h" 有点不懂这个源文件此时的含义 我删除了这个源文件进行编译,结果提示错误了,但是我看也有头文件单独存在不对应源文件的情况,却不会报错。 想问:这类型源文件的含义是什么?还有什么情况下可以不写源文件? ------------ 如果.cpp里面只有一句"#include "DBIn.h""的话,这个.cpp删除出工程(不是删除源文件,是删除出工程)是可以的。这种原文件没准是占位留着扩展的,如果你的头文件里面的申明都在.h里面实现了的话,可以不用源文件了,另外自己写C++代码的话还是养成.h里面申明,cpp里面实现的习惯。可读性会很好。
paschen 版主 2016-11-01
  • 打赏
  • 举报
回复
或许你直接将DBIn.cpp从项目中移除则没有问题
flying_music 2016-11-01
  • 打赏
  • 举报
回复
一般情况下h文件是给别人用的,也可以理解为是给别的cpp文件用的,因为C/C++一般的文件组织方式为cpp文件中放的是函数的定义和变量的定义(比如a.cpp),如果别的cpp文件(比如b.cpp)里要用这些函数或者变量,就要包含对应的头文件(a.h),而头文件里放的是这些东西的声明,当编译b.cpp时,编译器会看到a.h中对a.cpp中变量和函数的声明,这样编译器就不会报错了,否则就会出现未定义错误,这是正常的情况 你说的情况是a.cpp中要不要包含a.h,这个问题就要看编译a.cpp时会不会用到a.h中的东西了,一般情况下,定义是不用见到声明的,但也有一些特殊情况,比如当涉及到类时,类本身是定义了一个作用域,所以在其他文件(也就是a.cpp文件)定义类的成员变量(一般是静态)或成员函数时是要见到类的定义的,比如你写的void A::fun(){}里面那个A必须是可见的,这个时候就要包含对应的头文件了
eziowayne 2016-11-01
  • 打赏
  • 举报
回复
可能是这样,DBIn.cpp的实现放在DBIn.h里面了,但是工程中的其他文件可能并不是直接包含DBIn.h的,而是包含DBIn.h对应的声明头文件,如果你不编译DBIn.cpp,应该会提示链接错误。 你说的其他没有源文件的情况是很常见的:一个模块编译成一个库文件,然后只要提供给你头文件和库你就能顺利编译了。
小灸舞 2016-11-01
  • 打赏
  • 举报
回复
头文件是预编译的。每个源文件包涵的头文件都会被预编译包含到源文件中去。
有些头文件所对应的实现,已经打包在一起变成了.lib和.dll这些库文件了,所以你看不到它的源文件

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧