【问题标题】:Coming from an OOP background, what would be some C programs/libraries to help me get the "C way"?来自 OOP 背景,有哪些 C 程序/库可以帮助我获得“C 方式”?
【发布时间】:2011-06-30 10:17:12
【问题描述】:

我从事 OOP(C++/Java/PHP/Ruby)已经有很长时间了,真的很难想象大型程序和库(如 Linux 或 Apache)如何完全以命令式风格编写。我可以查看哪些小型开源 C 项目以了解 C 中的工作方式?

如果项目托管在 GitHub 上,则可获得奖励积分。

【问题讨论】:

  • 你说的有多小?我一直认为 Linux 内核是一个值得研究的有趣项目。
  • 实际上,大多数大型 C 项目都是使用结构体以面向对象的风格编写的。
  • @Mr. Shickadance:现在太大了;)我在想几千个 LOC

标签: c oop imperative-programming


【解决方案1】:

在 C 中的操作方式完全相同,但语言的支持较少。您无需创建一个类来封装某些状态,而是创建一个结构。您无需使用隐式 this 参数创建类成员,而是创建将 struct* 作为第一个参数显式传递的函数,然后对 struct 进行操作。

为确保封装不被破坏,您可以在标头中声明结构,但只能在使用它的 .c 文件中定义它。虚函数需要更多的工作——但同样,它只是将函数指针放入结构中的一种情况。这实际上在 C 中比在 C++ 中更方便,因为在 C 中您可以手动填写 vtable,从而可以很好地控制代码的哪一部分实现了 COM 接口的一部分(当然,如果您在 C 中使用 COM) .

【讨论】:

    【解决方案2】:

    您可能会发现ccan(综合 C 存档网络,模仿 Perl 的 CPAN)很有趣。

    目前规模很小,但贡献质量很高。许多贡献来自 Linux 内核开发人员。

    其中几乎所有内容也都属于“几千个 LOC”或更少的类别。

    【讨论】:

      【解决方案3】:

      如果您想从一个小示例开始,请尝试查看基本 Linux CLI 实用程序的源代码。 GNU binutilsmakeother GNU utilities 中的任何一个都有完整的源代码可用并且是相对较小的代码库(有些比其他的大)。最简单的事情通常是从您以前使用过并且已经熟悉的实用程序开始。

      【讨论】:

        【解决方案4】:

        查看GLib,了解如何在 C 中进行面向对象编程的几乎规范示例。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-15
          • 1970-01-01
          • 2011-07-12
          • 1970-01-01
          相关资源
          最近更新 更多