5

在“C 的最佳用途是什么”问题之后。

Linux内核似乎是一个著名且思想很好的C程序。但它是主流“最佳实践”C 的一个很好的例子吗?

4

9 回答 9

18

我已经准备好为此而烦恼,但 Linux 内核是一个失控的学生项目。更严重的是,从编程的角度来看,Linux 内核做得很好的是,它制定了一套非常严格的设计和编码指南,使大量人员可以做出贡献,同时仍然让所有东西组合在一起。

我信任的那些将操作系统作为他们毕生工作的人告诉我,BSD 内核是良好的 C 编程和良好的操作系统设计的一个更好的例子我对伯克利的教授们了解得够多了,所以我对这种说法并不感到惊讶。

更广泛地说,操作系统内核是高度专业化的东西——内核没有什么主流的东西。如果您想了解良好的 C 实践示例,您可以尝试 Kernighan 和 Pike 关于编程实践的书。或者,如果你想研究一个真实的系统,Lua 的实现足够小,你可以阅读所有内容,设计得非常好,并且非常便携——可以在任何带有 ANSI C 编译器的平台上运行。

为主观和争论的答复道歉:(

于 2009-01-14T03:59:04.797 回答
16

你说的好例子是什么意思?我相信 Linux 内核是一个用 C 语言编写的非常好的内核,但存在一些问题,其中许多问题正在清理中。但是,就使用它作为如何编写通用 C 代码的示例而言,我认为它不太合适。阅读和理解内核会教你很多关于 C 的知识。但是你在内核中找不到任何可以谈论的库。标准库不可用。因此,例如,您将看到“printk”而不是“printf”等等。还有一些黑魔法。内核是一个非常特殊的情况。我不会用它来寻找最佳实践,比如说,如果你正在编写一些通用应用程序,比如文件管理器或数据库。

于 2009-01-14T00:56:09.630 回答
9

是的。

如果您不想被内核的细节淹没,您可以从一些用 C 编写的 Linux 实用程序函数开始。有关如何获取源代码的详细信息,请参阅此问题的答案。

另一个阅读 C 源代码的好地方是 C 自己的标准库

最后,我听说的另一个最近的 C 项目是Git

于 2009-01-14T00:55:27.460 回答
3

我建议查看 gnu 实用程序(例如,标准 unix 实用程序的源代码,例如“ls”和“awk”),因为它们将更容易理解并且更有可能以更简洁的方式编写(内核与其他类型的软件具有不同的性能需求和兼容性问题)。

于 2009-01-14T03:37:39.083 回答
2

对于主流节目?不。 *nix 内核代码通常不在用户空间中,因此与大多数“主流”编程相比,它具有不同的约定和要求。然而,它是一些你可以学习学习的最好和最高质量的 C 代码。它有它的弱点,而且它不是完全写得很好,但在大多数情况下,它是非常有效的、干净的代码。

于 2009-01-14T09:37:29.420 回答
1

它是否是“最佳实践”取决于你问的是谁。在 Windows 平台上也有很多低级 C 程序,但是如果你看一下它们(例如,来自 WINDDK 的设备驱动程序示例),你会发现微软已经成功地发明了另一种他们称之为 C 的语言 :-)但是,如果您想在 Windows 上开发设备驱动程序,这些可能应该被视为“最佳实践”。

于 2009-01-14T01:19:28.600 回答
1

如果您是从学习 C 的角度来问,那么一开始可能会觉得太难了。就 C 的使用而言,它最适合需要可移植性和性能的应用程序。它通常用于系统级编程。但是,这样做是以牺牲抽象为代价的。因此,您必须自己完成大部分编码工作,这与 Java 甚至 C++ 等语言不同。理想情况下,您的应用程序类型应该决定语言的选择,并且使用操作系统 C 是要走的路。

了解 Linux 内核的一种方法是从一个非常旧的 linux 内核版本开始。这将包含肉并隐藏当前内核中存在的额外复杂性。这应该足以理解基础知识。

于 2009-01-14T00:57:32.060 回答
0

我发现内核是如何编写模块化代码的一个很好的例子。尽管是 C,但它在某种程度上是面向对象的。

于 2010-07-08T16:53:10.247 回答
0

一个很好的地方是查看一些正在使用的开源编译器的代码。您需要出色的数据结构和指针技能来编写编译器。

于 2009-01-14T03:43:28.620 回答