在 C 中编译带有自己头文件的文件

Foo*_*HAH 5 c compilation header

我目前正处于学习如何用 C 语言编程的开始阶段,我遇到了一些重新分级头文件的问题。例如

我有一个名为 的头文件header.h

int comp (int, int)宣布在header.h

定义于header.c

在这种情况下,如果我要使用 comp 函数编译 test.c,我必须像

gcc test.c header.c
Run Code Online (Sandbox Code Playgroud)

第一个问题:每次 gcc 都必须添加 header.c 似乎太不方便和多余。这是必需品吗?如果没有,我有办法绕过它吗?如果是这样,为什么?或者事实上,与它的用法相比,它并不多余,我只是在抱怨吗?

第二个问题:如果我要使用多个 .c 文件以及 header.h 中声明的函数,我的 gcc 就必须去

gcc test.c header.c header2.c header3.c .....
Run Code Online (Sandbox Code Playgroud)

这又显得太多余了。(从这里开始,问题与第一个问题相同..)

提前致谢。第一次在SO提问。请告诉我是否有任何办法可以提高问题的清晰度。

Cer*_*ii 1

通常需要将代码分布在多个文件中;这有助于简化代码管理。头文件提供了一种统一的方式,将库或源代码文件中定义的函数公开给其他源代码文件,而不包含这些函数的实际代码。这样,相同的头文件可以包含在多个源代码文件中,而无需为每个文件编译相同的代码。然而,这意味着头文件中函数的源代码也必须提供给编译器。header.c因此,每次编译时都必须将其提供给编译器。

这确实意味着您header.c每次构建项目时都会进行编译,这有点多余。解决这个问题的一种方法是将其编译header.c目标文件,然后在构建时将其提供给编译器:

gcc -c header.c -o header.o
gcc header.o test.c
Run Code Online (Sandbox Code Playgroud)

此外,软件开发人员通常喜欢将他们的程序功能分发给其他开发人员,但不提供实际代码。为此,他们经常使用软件库,其中包含已编译的源代码以及用于访问此代码的头文件。这可能比您想要的要多一点,所以我会让您继续阅读。

所有这些并不是为了减少编译器命令中的冗余,而是为了减少编译后的程序中的冗余。为了让程序员更轻松地构建他们的程序,经常使用 makefile 和 IDE。这些可能是您可能需要阅读的内容,但此处发布的其他答案应该提供一个很好的起点。