C++-库与头文件的关系
一般我们在头文件里写入函数的声明 在源文件里定义声明。但是我发现有些头文件里的声明,是在库中定义的 例如很多库函数,那库和源文件有什么区别的 为什么要把定义放在库里 类似标准库 而不是源文件里呢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
一般我们在头文件里写入函数的声明 在源文件里定义声明。但是我发现有些头文件里的声明,是在库中定义的 例如很多库函数,那库和源文件有什么区别的 为什么要把定义放在库里 类似标准库 而不是源文件里呢
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(5)
你可以想象下如果标准库不编译成库,你就算写个小程序都要去包含一堆源文件麻烦不麻烦,看着累不累
简单的说,就是.cpp和.h的关系。
头文件就是声明,而库文件是实现。
一般而言是一一对应的,但也有可能在头文件里把功能实现了,这样也就不存在其对应的库文件了
一般情况下编写程序的时候我们一般都会使得声明和实现相分离。这个也就是c++中的.h文件和.cpp文件存在的原因。这样使得我们有时候需要快速浏览接口的时候我们只需要查看.h文件就行了这样很快。
我认为将实现和声明分离主要是为了便于管理。
但是需要注意的问题是在编写cpp的模板的时候,必须要将实现和声明放在一个文件中,不然会出现变异错误。
“一般”才是对的,因为头文件中也是可以定义的,只是攻城狮们一般都习惯于声明和定义分开而已。
具体点的可以去看《C++ Primer》么,这本书里比较权威。
将声明(放在头文件中)和定义(放在源文件)区分开来符合接口和实现分离的原则,其他用到该类或函数接口的程序员应该仅通过声明文件就知道其用法,而不需要花费太多的时间去看定义,也就是源文件。
将源文件封装成二进制的库(比如dll 或者lib),其实就是已经将这些源文件编译成了目标文件(obj格式),再将这些obj格式的文件整合在一起,也就形成了一个库。这样让用户使用这些库的时候,有两个好处:
加快了编译的速度,因为已经编译成二进制的库了。当项目变大时,编译是很花时间的。
某些商业应用的库为了保护自己的权益,是不公开源代码的,将源代码封装成二进制的库,起到保密的作用,在卖给用户时,给用户以详细的文档说明如何使用这些库。
C++标准库是编译器的一部分。某些编译器实现厂商(例如微软的vc++)是不公开其源代码的,在使用的时候包含正确的头文件,并链接上相应的库就可以使用了。