【问题标题】:Can I use only one header for a bigger application?对于更大的应用程序,我可以只使用一个标头吗?
【发布时间】:2016-06-22 09:23:38
【问题描述】:

我是一个新手,并且可以访问一个相当复杂的源代码,该源代码是由一个 90 年代的团队创建的,他们都经验丰富,并且经常一起工作。源代码由大约 60 个不同的 .c 文件组成,其中包括更多的头文件,其中大部分只包含几行代码。一个包含的文件定义了标题中的main 函数,而其他包含诸如#define#include#if (#endif)、#else#undef#pragma 之类的指令等等以及一些结构(struct)。您还可以找到enum(与#define 大致相同)、const 和一些变量,如charintshortlongfloat、@ 987654339@等

除非.c 文件确实需要它们,否则这些都不会被使用。由于大多数.c 文件都包含许多此类头文件,因此很难跟踪它们。我的想法是将所有头文件放在一个单独的头文件中,我将调用Unihead.h。如果我想做任何更改,我必须检查多达 15 个不同的头文件才能找到问题。我看不到那么多头文件的好处。据我所知,每个源文件都有一个标题是正常的(比如Soccer.c 会有一个名为Soccer.h 的标题)。如果我有一个头文件,我可以进行简单的搜索并更有效地找到我要查找的内容,从而使我认为该过程更加顺畅。这样做有什么不好的地方吗? (反正我也会添加 cmets 来跟踪)

【问题讨论】:

    标签: c c-preprocessor header-files


    【解决方案1】:

    不要认为这是个好主意。

    您也可以将所有 60 个.c 文件合并为一个文件。但是,这种源文件和头文件结构有很多原因。您应该尝试了解项目结构。

    【讨论】:

    • 是的,你可以把所有的 c.-files 加在一起,但是这些更清楚地说明了为什么它们被分成了部分。它使一切更有条理。虽然头文件,但在我看来并不是代码中组织良好的系统。通常代码本身也很混乱。例如,在 .c 文件中有像 #define 这样的指令。以及许多变量...
    【解决方案2】:

    写得很好的c代码,像金字塔一样排列,主文件在顶部。依赖项(函数调用、枚举、常量等)将在金字塔中向下运行。从不向上。这将帮助您在未来维护、扩展和测试您的代码。

    如果您折叠所有头文件,您也会折叠金字塔。然后你也可以折叠 c 文件。

    头文件(通常)用于给定模块的公开部分。例如。这些将包含“公共函数”、“公共常量”等。“私有常量”、“私有宏”等代码最好保存在 c 文件中。这就是您的 c 文件包含“#defines”的原因。

    对我来说,您的代码听起来写得很好。例如。每个文件的标头(可能是金字塔),仅包含公开代码的小标头。

    注意不要破坏的比增加的多。

    【讨论】:

      【解决方案3】:

      这样做有什么不好的地方吗?

      编译时间可能会增加,尤其是在生成的单片头文件很大时。

      此外,名称冲突的风险很小。标头可能会声明一些函数,并且其中一个源文件(当前不包含该标头)可能具有同名的 static 函数 - 这将导致编译问题。类似地,源文件可能会定义一个供内部使用的类型,其类型的名称在头文件中定义不同。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-03
        • 2013-01-28
        • 1970-01-01
        • 1970-01-01
        • 2018-10-02
        • 1970-01-01
        • 1970-01-01
        • 2023-03-16
        相关资源
        最近更新 更多