我的程序如何在不包含必要的 .c 文件的情况下运行?

How does my program run without including necessary .c files?

我正在用 C 编写代码,为了组织我的程序并使其更清晰,我将所有功能从 main.c 中取出并放入它们自己的 .c 文件中,这些文件都包含 header.h。我忘记在我的 main.c 中包含所有 .c 文件,当我编译程序时,它仍然运行得很好!这怎么可能?您不需要包含同一文件夹中的 .c 文件吗?为了安全起见,我是否仍应包含 .c 文件?

不应该将其他 .c 文件包含在 main.c

C 编译器会将每个 .c 文件分别编译成 .o 文件。

然后链接器的工作就是将生成的目标文件重新放在一个可执行文件中。

您可以拥有任意数量的 c 文件,在编译时生成目标文件,然后链接到生成可执行二进制文件。

虽然在您的 main.c 中包含 c 文件可以工作,但这不是将程序拆分为不同文件的合适方法,正确的方法是将所有文件编译成一个称为目标文件的中间表示,然后链接器将它们全部链接在一起以生成可执行二进制文件。

所以编译是这样的

file1.c -> file1.o
file2.c -> file2.o
file3.c -> file3.o
file4.c -> file4.o

        .
        .
        .
        .

然后是获取所有文件的链接阶段

file1.o file2.o file3.o file4.o  ... -> executable-binary-file

您也可以一次性将所有的 c 文件传递​​给编译器。