C 链接两个源文件而不是使用头文件有什么意义?

C 链接两个源文件而不是使用头文件有什么意义?,c,C,为什么我应该使用另一个源代码文件在多个程序之间共享代码或函数,并使用链接器而不是仅使用头文件?(我在Head First C中读到了这篇文章,但我不明白它的意义所在)通常,头文件包含声明,比如函数签名,而函数定义(实际的源代码)位于单独的源文件中 多个文件可以在编译时包含相同的头文件和共享函数声明。但它们还必须共享源文件(这些文件必须链接在一起),以便在运行时访问函数代码。通常,头文件只能用于声明函数/结构/类。 实际的实现应该在一个单独的.c文件中创建,然后该文件可以作为二进制文件与头一起构建

为什么我应该使用另一个源代码文件在多个程序之间共享代码或函数,并使用链接器而不是仅使用头文件?(我在Head First C中读到了这篇文章,但我不明白它的意义所在)

通常,头文件包含声明,比如函数签名,而函数定义(实际的源代码)位于单独的源文件中


多个文件可以在编译时包含相同的头文件和共享函数声明。但它们还必须共享源文件(这些文件必须链接在一起),以便在运行时访问函数代码。

通常,头文件只能用于声明函数/结构/类。 实际的实现应该在一个单独的
.c
文件中创建,然后该文件可以作为二进制文件与头一起构建和导出

将实现保留在报头中有许多缺点

  • 更大的占地面积-页眉大小将更大,因为您有 里面有更多的符号
  • 您不能对最终用户隐藏实现
  • 编译时间将大得多,因为每次编译器包含所有代码时都必须对其进行处理
  • 仅举几个例子。可能还有更多的原因

    但是,在某些情况下,在头文件中包含一些逻辑是可以/更好的。
    例如,对于内联函数来说,这可以改善应用程序的运行时间,同时保持C++中的良好代码质量和/或模板。

    因为头文件通常只包含骨架,实际的逻辑在.c文件中(或者,编译在.O文件中)。@Ctx你的意思是头文件通常包含函数声明而没有定义吗?是的,没错。有例外,但这是规则。编译器的速度是原因之一。假设一个库有一百万行代码,你不想每次编译你的程序都编译它。但是我可以在头文件中声明和定义一个函数,这与在头文件中声明一个函数并在源文件中定义它不同吗?你可以在头文件中定义一个函数,但它效率低下,并且可能会导致多个定义错误。看(答案是C++,但一般也适用于C)非常感谢解释为什么不好定义FUNC在头我想问你另一个问题,我需要链接到源文件使用定义的函数,我链接这些文件之前,我编译它们。我的问题是,在运行源文件后,compile如何从C标准库中获取函数定义?(在我运行程序后,它如何知道我需要stdio.c的源文件?)。标题包含编译器的信息,您正在链接到由带指令的二进制文件组成的库。当你安装一个编译器时,你会得到所有的核心语言库,编译器知道在哪里可以找到这些文件。如果要使用第三方库,则必须在构建程序时指定它。我建议选择一个编译器(例如gcc)并阅读它的文档。另外,检查
    .so
    /
    .dll
    .a
    libs是什么。