在“C 的最佳用途是什么”问题之后。
Linux内核似乎是一个著名且思想很好的C程序。但它是主流“最佳实践”C 的一个很好的例子吗?
我已经准备好为此而烦恼,但 Linux 内核是一个失控的学生项目。更严重的是,从编程的角度来看,Linux 内核做得很好的是,它制定了一套非常严格的设计和编码指南,使大量人员可以做出贡献,同时仍然让所有东西组合在一起。
我信任的那些将操作系统作为他们毕生工作的人告诉我,BSD 内核是良好的 C 编程和良好的操作系统设计的一个更好的例子。我对伯克利的教授们了解得够多了,所以我对这种说法并不感到惊讶。
更广泛地说,操作系统内核是高度专业化的东西——内核没有什么主流的东西。如果您想了解良好的 C 实践示例,您可以尝试 Kernighan 和 Pike 关于编程实践的书。或者,如果你想研究一个真实的系统,Lua 的实现足够小,你可以阅读所有内容,设计得非常好,并且非常便携——可以在任何带有 ANSI C 编译器的平台上运行。
为主观和争论的答复道歉:(
你说的好例子是什么意思?我相信 Linux 内核是一个用 C 语言编写的非常好的内核,但存在一些问题,其中许多问题正在清理中。但是,就使用它作为如何编写通用 C 代码的示例而言,我认为它不太合适。阅读和理解内核会教你很多关于 C 的知识。但是你在内核中找不到任何可以谈论的库。标准库不可用。因此,例如,您将看到“printk”而不是“printf”等等。还有一些黑魔法。内核是一个非常特殊的情况。我不会用它来寻找最佳实践,比如说,如果你正在编写一些通用应用程序,比如文件管理器或数据库。
我建议查看 gnu 实用程序(例如,标准 unix 实用程序的源代码,例如“ls”和“awk”),因为它们将更容易理解并且更有可能以更简洁的方式编写(内核与其他类型的软件具有不同的性能需求和兼容性问题)。
对于主流节目?不。 *nix 内核代码通常不在用户空间中,因此与大多数“主流”编程相比,它具有不同的约定和要求。然而,它是一些你可以学习学习的最好和最高质量的 C 代码。它有它的弱点,而且它不是完全写得很好,但在大多数情况下,它是非常有效的、干净的代码。
它是否是“最佳实践”取决于你问的是谁。在 Windows 平台上也有很多低级 C 程序,但是如果你看一下它们(例如,来自 WINDDK 的设备驱动程序示例),你会发现微软已经成功地发明了另一种他们称之为 C 的语言 :-)但是,如果您想在 Windows 上开发设备驱动程序,这些可能应该被视为“最佳实践”。
如果您是从学习 C 的角度来问,那么一开始可能会觉得太难了。就 C 的使用而言,它最适合需要可移植性和性能的应用程序。它通常用于系统级编程。但是,这样做是以牺牲抽象为代价的。因此,您必须自己完成大部分编码工作,这与 Java 甚至 C++ 等语言不同。理想情况下,您的应用程序类型应该决定语言的选择,并且使用操作系统 C 是要走的路。
了解 Linux 内核的一种方法是从一个非常旧的 linux 内核版本开始。这将包含肉并隐藏当前内核中存在的额外复杂性。这应该足以理解基础知识。
我发现内核是如何编写模块化代码的一个很好的例子。尽管是 C,但它在某种程度上是面向对象的。
一个很好的地方是查看一些正在使用的开源编译器的代码。您需要出色的数据结构和指针技能来编写编译器。