c - 'C' 项目架构指南的建议?

标签 c architecture coding-style

<分区>

既然我已经全神贯注于“C”语言,以至于我觉得自己足够熟练,可以编写干净的代码,我想将注意力集中在项目架构指南上。我正在寻找涵盖以下主题的好资源:

  1. 如何创建可促进代码可维护性并可扩展以供将来升级的接口(interface)。
  2. 库创建指南。例如,我什么时候应该考虑使用静态库和动态库。如何正确设计 ABI 以应对其中任何一种情况。
  3. 头文件:分区的内容和时间。何时使用 1:1 与 1:many .h 到 .c 的示例
  4. 任何你觉得我错过但在尝试构建新的 C 项目时很重要的东西。

理想情况下,我希望看到一些从小到大的示例项目,并了解架构如何根据项目规模、功能或客户而变化。

对于此类主题,您会推荐哪些资源?

最佳答案

每当我开始认真编写 C 代码时,我都必须在其中模拟 C++ 功能。值得做的主要事情是:

  • 将每个模块想象成一个类。您在 header 中公开的功能类似于公共(public)方法。如果函数是模块所需接口(interface)的一部分,则仅将其放在 header 中。

  • 避免循环模块依赖。模块A和模块B不应该互相调用。您可以将某些东西重构到模块 C 中以避免这种情况。

  • 同样,遵循 C++ 模式,如果您有一个模块可以对不同的数据实例执行相同的操作,请在您的接口(interface)中有一个创建和删除函数,该函数将返回一个指向传递回的结构的指针到其他功能。但是为了封装,在公共(public)接口(interface)中返回一个空指针,并转换为模块内部的结构。

  • 避免模块作用域变量——前面描述的模式通常会满足您的需要。但是,如果您确实需要模块范围的变量,请将它们分组在一个结构下,该结构存储在一个名为“m”或一致的模块范围变量中。然后在您的代码中,每当您看到“m.variable”时,您一眼就会知道它是模块范围结构之一。

  • 为避免标题问题,放置#ifndef MY_HEADER_H #define MY_HEADER_H 声明以防止双重包含。模块的 header .h 文件应仅包含该 header 文件所需的#includes。模块 .c 文件可以包含编译模块所需的更多包含,但不要将这些包含添加到模块头文件中。这将使您免于许多命名空间冲突和包含顺序问题。

关于c - 'C' 项目架构指南的建议?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2792422/

相关文章:

c - 如何实现以下算法以在 c 中对动态数组进行排序?

architecture - 微服务:优点和缺点是什么?

perl - 我应该如何使用作业队列 [和 Perl/Catalyst] 最好地构建我的 Web 应用程序?

java - 到处使用 `final` 修饰符的开源 Java 项目

java - 构造具有许多私有(private)集合字段的对象

c - 新声明后内存地址是否改变?

c - 警告 : format '%d' expects argument of type 'int *' , 但参数 2 的类型为 'int'

architecture - 高层架构

c++ - "using std::begin;"是一个好习惯吗?

c - 在 char(8 位)上使用 Int(32 位)到 'help' 处理器