C语言文件类型

示例

编译C程序需要使用五种文件:

  1. 源文件:这些文件包含函数定义,并具有.c以约定结尾的名称。注意:.cc和.cpp是C ++文件;不是C文件。
    例如,foo.c

  2. 头文件:这些文件包含函数原型和各种预处理器语句(请参见下文)。它们用于允许源代码文件访问外部定义的函数。头文件.h按约定结尾。
    例如,foo.h

  3. 目标文件:这些文件是作为编译器的输出生成的。它们由二进制形式的函数定义组成,但它们本身不能执行。目标文件.o按约定结尾,尽管在某些操作系统(例如Windows,MS-DOS)上,它们通常以结尾.obj。
    例如,foo.o foo.obj

  4. 二进制可执行文件:这些文件是作为称为“链接器”的程序的输出而产生的。链接器将许多目标文件链接在一起,以生成可以直接执行的二进制文件。二进制可执行文件在Unix操作系统上没有特殊的后缀,尽管它们通常以.exeWindows结尾。
    例如,foo foo.exe

  5. :库是编译的二进制文件,但本身不是可执行文件(即,main()库中没有函数)。库包含可由多个程序使用的功能。库应随附头文件,该头文件包含库中所有功能的原型;这些头文件应#include <library.h>在使用该库的任何源文件中引用(例如)。然后需要将链接器引用到库,以便可以成功编译程序。库有两种类型:静态库和动态库。

    • 静态库:静态库(该库.a是POSIX系统的.lib文件和Windows的文件,不要与DLL导入库文件混淆,后者也使用.lib扩展名)。静态库的优点是程序可以准确知道使用哪个版本的库。另一方面,由于包括所有使用的库函数,可执行文件的大小也更大。
      例如,libfoo.a foo.lib

    • 动态库:动态库(.so对于大多数POSIX系统的文件,.dylib对于OSX是.dll文件,对于Windows的文件)是在程序运行时动态链接的。这些有时也称为共享库,因为一个库映像可以被许多程序共享。如果有多个应用程序正在使用该库,则动态库具有占用较少磁盘空间的优势。而且,它们允许库更新(错误修复),而不必重建可执行文件。
      例如,foo.so foo.dylib foo.dll