头文件应该怎么处理好呢

caterpillarous 2017-02-10 12:27:12
最近抄stl,写了一堆.h/cpp文件,于是产生了几个问题,希望大家赐教.
所有文件假设有main.cpp vector.h list.h三个吧

问题1:
我为每个.h文件添加了一个对应的.cpp文件, cpp文件只有一行,
以vector.h为例.vector.cpp中就是一行include "vector.h",然后我把vector.cpp与vector.h编译成vector.obj
其实我的目的就是想将h文件编译成二进制,然后之后就可以不用再编译vector.h了,我想问一下这种方式可以吗?
(其实我打完字之后就觉得不可以了,不过还是想问一下)

问题2:
接上面那个问题,在项目中我们通常是怎样对待头文件的呢.我看了下MingW的文件夹,也没发现stl的文件被编译成动态库静态库之类的. 我觉得编译成二进制似乎可以减少之后的编译时间? 因为库文件反正不改,只要最后链接一下就好了.
能否说一下为什么将/不将stl编译成链接库呢,有什么好处/坏处吗? 提供一些文章或者搜索的关键字也可以,我不知道怎么在google里描述这个问题,所以来论坛问一下,希望大家赐教,谢谢.
...全文
167 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
幻夢之葉 2017-02-10
  • 打赏
  • 举报
回复
1:编译器才没那么傻,没改动的情况下(直接的或者间接的),直接链接obj了,不会再编译 2:stl目前当然是不能编译成静态lib的呀,假设我只需要vector,那我只需要那一部分代码(包括很多的#include),包好这部分代码就够了。 假如整个编译成静态lib,那程序就必须包含所有,那不增加你程序不必要的体积么 PS:这个回答可能并不是你问题答案的主要原因 另外:你可以百度下 预编译头文件 (对于中大型项目的编译很有用处)
pengzhixi 2017-02-10
  • 打赏
  • 举报
回复
涉及模板的就不要试图编译成动/静态库了。
FD_2013 2017-02-10
  • 打赏
  • 举报
回复
一些特殊的情况可以这么用,比如你写了一些东西不想给别人看源代码的时候,可以简单这么用,个人认为这是一个历史遗留问题,以前没有别的保护源代码的方式,实现了这么一种方式。后来就留下来成了历史遗留问题。 上面都是我猜的,一本正经的胡说八道的,看看就好
paschen 版主 2017-02-10
  • 打赏
  • 举报
回复
把不经常更改的头文件包含在预编译头里以加快编译速度
paschen 版主 2017-02-10
  • 打赏
  • 举报
回复
其次,如果是类模板,需要放到同一个文件中
paschen 版主 2017-02-10
  • 打赏
  • 举报
回复
每个源文件对应一个编译单元,头文件只会被包含到源文件中参与编译,不会单独被编译
caterpillarous 2017-02-10
  • 打赏
  • 举报
回复
引用 1 楼 jianwen0529 的回复:
1:编译器才没那么傻,没改动的情况下(直接的或者间接的),直接链接obj了,不会再编译 2:stl目前当然是不能编译成静态lib的呀,假设我只需要vector,那我只需要那一部分代码(包括很多的#include),包好这部分代码就够了。 假如整个编译成静态lib,那程序就必须包含所有,那不增加你程序不必要的体积么 PS:这个回答可能并不是你问题答案的主要原因 另外:你可以百度下 预编译头文件 (对于中大型项目的编译很有用处)
我在问题1里的意思是头文件没法编译到obj,所以每次都要重新编译很麻烦。 不过2楼的回复点醒我了,模板的话本来就是要在编译期根据不同的类生成好多份代码的,所以编译成库就没意义。 非常感谢

64,637

社区成员

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

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