C语言 在多个文件程序和包含中,函数定义如何包含在主程序中?



如果我有一个头文件List.h其中包含与列表相关的函数的原型,则函数的定义位于源文件(c 文件)List.c中。List.c文件和main.c文件(或表示主程序的任何源文件)都包含List.h文件。现在主程序有列表函数的原型,但是函数的定义是如何包含在主程序中的,而List.c文件没有包含在main.c文件中?这与List.hList.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自动执行所有这些操作。

它们是单独编译的。编译后,大多数编译器生成包含可执行代码、重定位、符号、调试和其他一些信息的目标文件。这些对象文件接下来由链接器程序"合并"在一起,该程序使用目标文件中的信息来创建正确的可执行文件。

这当然是一个非常简化的描述,如果您想了解更多信息,您应该在互联网上阅读更多相关信息。

最新更新