带有.C和.H的真实世界项目结构

问题描述 投票:0回答:1

那么当我们编写一个 C 程序时,我们只需要一个 .C 文件,对吗? 我们可以将额外的 C 文件和 H 文件包含到我们的主 .C 文件中,但我不确定它们之间有什么区别。

为什么要创建多个 .C 文件? 他们不能创建一堆 .H 文件并将它们包含在主 .C 文件中吗?

如果我们将一大堆 .H 文件包含到主 .C 文件中,是否会增加构建时间? 如果是这样,那么您想要做的是为您为程序创建的每个“模块”创建一个 .C 文件和一个 .H 文件,然后只在需要的地方包含特定的 .H 文件?

我只是想了解大型项目如何处理它。

c structure project
1个回答
0
投票

.c
.h
文件之间的区别

  • .c
    文件(对于 C++ 也是
    .cpp
    ):这些是实际代码实现所在的源文件。这是您定义函数、编写逻辑等的地方。

  • .h
    文件(头文件):这些文件包含其他
    .c
    文件可能需要了解的函数、变量和其他构造(例如结构、常量)的声明。头文件通常不包含实际的实现(尽管有时会包含模板、宏或内联函数)。

为什么要使用多个
.c
文件?

  • 模块化:将代码拆分为多个

    .c
    文件可以让您更好地组织它。每个
    .c
    文件处理特定的“模块”或一组相关功能。这提高了大型项目的可读性、可维护性和团队协作。

  • 可重用性:程序的不同部分(甚至不同的项目)可以重用

    .c
    文件。例如,数学库可以保存在单独的
    .c
    文件中,您可以根据需要将其包含在各种程序中。

  • 编译效率:每个

    .c
    文件都是单独编译的。这意味着如果您只更改一个文件,则只需重新编译该文件而不是整个项目。这减少了大型项目的构建时间。

为什么不直接使用
.h
文件?

  • Separation of Declarations and Definitions:
    .h
    文件旨在声明存在的内容,而
    .c
    文件旨在定义其工作方式。仅包含 .H 文件意味着您必须在其中放入实际的函数代码,这违背了将接口(函数做什么)与实现(函数如何做)分开的想法。

  • 多重包含问题:如果将代码放在

    .h
    文件中并将它们包含在多个
    .c
    文件中,编译器将尝试多次编译相同的代码,这将导致错误。这就是为什么您通常只在
    .h
    文件中声明事物并在
    .c
    文件中定义它们。

包含许多
.h
文件会增加构建时间吗?

是的,包含许多

.h
文件会减慢构建过程,因为编译器必须处理所有包含的文件。但是,如果
.h
文件仅包含声明(它们应该如此),则此开销通常很小。如果您要在
.h
文件中包含大量实际代码(定义),那么真正的打击就会到来。 典型的项目结构

在大多数 C 项目中,您会将代码构建为单独的

.c
.h
文件,如下所示:

对于每个模块,创建:

  • 包含该模块实现的
    .c
    文件。
  • 对应的
    .h
    文件,包含其他模块需要使用的函数和类型的声明。 然后,您可以在需要的地方包含
    .h
    文件。
    .c
    文件单独编译并链接在一起形成最终的可执行文件。
示例
math.h        // Declarations for math functions (like add, subtract, etc.)
math.c        // Definitions (actual code) for those math functions
main.c        // The main program that uses the functions declared in math.h

main.c
中,您可以包含
math.h
来访问加法和减法函数声明,但实现仍保留在
math.c
中。

© www.soinside.com 2019 - 2024. All rights reserved.