我从事 OOP(C++/Java/PHP/Ruby)已经有很长时间了,真的很难想象大型程序和库(如 Linux 或 Apache)是如何完全以命令式风格编写的。我可以查看哪些小型开源 C 项目以了解 C 中的工作方式?
如果项目托管在 GitHub 上,则可以加分。
我从事 OOP(C++/Java/PHP/Ruby)已经有很长时间了,真的很难想象大型程序和库(如 Linux 或 Apache)是如何完全以命令式风格编写的。我可以查看哪些小型开源 C 项目以了解 C 中的工作方式?
如果项目托管在 GitHub 上,则可以加分。
Things are done exactly the same way in C, but with less overt support from the language. Instead of creating a class to encapsulate some state, you create a struct. Instead of creating class members, with implicit this parameters, you create functions that you explicitly pass a struct* as the first parameter, that then operate on the struct.
To ensure that encapsulation is not broken you can declare the struct in a header, but only define it in the .c file where it is used. Virtual functions require more work - but again, its just a case of putting function pointers in the struct. Which is actually more convenient in C than C++ because in C you get to fill in your vtables manually, getting quite a fine level of control over which part of code implements part of what COM interface (if you are into COM in C of course).
您可能会发现ccan(Comprehensive C Archive Network,模仿 Perl 的 CPAN)很有趣。
目前它很小,但贡献是高质量的。许多贡献是由 linux 内核开发人员提供的。
那里的几乎所有东西也都属于“几千行”或更少的类别。
如果您想从一个小示例开始,请尝试查看基本 Linux CLI 实用程序的源代码。 GNU binutils、make或任何其他 GNU 实用程序都有完整的源代码可用并且是相对较小的代码库(有些比其他的大)。最简单的事情通常是从您以前使用过并且已经熟悉的实用程序开始。
查看GLib以了解如何在 C 中进行面向对象编程的几乎规范示例。