如果我有一个头文件List.h
其中包含与列表相关的函数的原型,则函数的定义位于源文件(c 文件)List.c
中。List.c
文件和main.c
文件(或表示主程序的任何源文件)都包含List.h
文件。现在主程序有列表函数的原型,但是函数的定义是如何包含在主程序中的,而List.c
文件没有包含在main.c
文件中?这与List.h
和List.c
文件具有相同的名称无关。
我正在Windows上工作并使用MS Visual Studio。
对于你的方案,将List.c
编译为List.o
(如果你在 Windows 上工作,则可能List.obj
),并将main.c
编译为main.o
。 然后再次运行编译器,将两个对象文件以及任何其他必要的库链接在一起。
如果您使用 GCC(GNU Compiler Collection 中的 GNU C 编译器),那么您可以使用:
gcc -Wall -Werror -std=c11 -c List.c
gcc -Wall -Werror -std=c11 -c main.c
gcc -Wall -Werror -std=c11 -o program main.o list.o
如果需要指定库,则应在目标文件之后添加库。
您可能也使用makefile
自动执行所有这些操作。
它们是单独编译的。编译后,大多数编译器生成包含可执行代码、重定位、符号、调试和其他一些信息的目标文件。这些对象文件接下来由链接器程序"合并"在一起,该程序使用目标文件中的信息来创建正确的可执行文件。
这当然是一个非常简化的描述,如果您想了解更多信息,您应该在互联网上阅读更多相关信息。