1、把一些相关的代码,打包成一个库,发布给其它的人用。
这中情况是最常见的情况,如写 C 语言用到 libgcc。在这种情况下,你除了提供库文件:静态库[ windows 下 .lib,linux .a];动态库:[Windows 下 .dll,Linux 下 .so] 之外,必须提供头文件。头文件是你这个库里面提供了那些接口可以供外界使用。如果没有头文件,其他人无法使用。
2、为某些软件写插件。
很多大的项目,都是模块化设计,留有一些特定的接口,方便定制。当程序运行时,会动态加载制定目录下的动态库,运行时调用动态库里面约定好的方法。
这种情况无需提供头文件,但要按照特定的约定来实现这个库。
大概就是以上这些情况。
什么时候需要头文件,是这样的:编译程序如果遇到一个函数调用,那么它就要查这个函数是否给出了调用的格式,假设这个函数是在调用程序前面写出的,那么经过编译程序的编译,编译程序已经知道了函数调用规则格式,就不需要再说明了,比如:由于fun函数体写在main函数之前,无需说明即可调用
void fun(int a,int n) { ... }
void main() { ... fun(x,y)}
如果函数写在调用程序之后,编译程序在编译这个调用语句时,没有编译过这个函数,那就需要在前面事先说明一下了:
void fun(int a,int n)//函数头说明语句
void main() { ... fun(x,y)}
void fun(int a,int n) { ... }
那么由于标准c函数库的头写到头文件中,你要使用必须加上这些函数的调用格式说明,所以要加include语句,你的函数其实也是一样的。
头文件中有函数的申明,库文件实现函数的定义。
比如,printf函数。使用时应包括stdio.h,打开stdio.h你只能看到,printf这个函数的申明,却看不到printf具体是怎么实现的,而函数的实现在相应的C库中。
而库文件一般是以二进制形式而不是C源文件形式提供给用户使用的。
程序中包括了stdio.h这个头文件。链接器就能根据头件中的信息找到printf这个函数的实现并链接进这个程序代码段里。
总结起来就是,库文件通过头文件向外导出接口。用户通过头文件找到库文件中函数实现的代码从而把这段代码链接到用户程序中去。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)