在针对“C语言最佳用途”的问题之后。
Linux内核似乎是一款非常著名且备受推崇的C程序。但它是否是主流“最佳实践”C语言的好例子呢?
在针对“C语言最佳用途”的问题之后。
Linux内核似乎是一款非常著名且备受推崇的C程序。但它是否是主流“最佳实践”C语言的好例子呢?
我知道这可能会让人不爽,但是Linux内核是一个失控的学生项目。更严肃地说,从编程角度来看,Linux内核所做的好事情是制定了非常严格的设计和编码准则,使得非常多的人可以贡献代码而仍然保持一切协调一致。
我信任的那些专门从事操作系统工作的人告诉我,BSD内核是良好的C编程和操作系统设计的更好例子。我认识伯克利的教授,所以对这种说法并不感到惊讶。
更广泛地说,操作系统内核是高度专业化的东西——内核没有任何“主流”的东西。如果您想要良好C编程实践的例子,可以尝试Kernighan和Pike关于The Practice of Programming的书。或者如果您想研究一个真正的系统,Lua的实现足够小,您可以阅读所有内容,非常好地设计,并且非常易于移植——可以在任何具有ANSI C编译器的平台上运行。
很抱歉我的回答带有主观性和争议性 :(
你所说的好例子是什么意思? 我认为Linux内核是用C语言编写的非常出色的内核,但存在一些问题,其中许多问题正在得到解决。然而,就将其作为如何编写通用C代码的示例而言,我认为它并不完全适用。阅读和理解内核将教你很多关于C语言的知识。但你在内核中找不到任何可用的库。标准库是不可用的。因此,例如,你会看到“printk”而不是“printf”,等等。还有一些黑魔法。内核是一个非常特殊的情况。如果你要编写一些通用应用程序,如文件管理器或数据库,我不会使用它来寻找最佳实践。
对于主流程序?不是。*nix内核代码通常不在userland中,因此具有与大多数“主流”编程不同的惯例和要求。然而,它是一些最好和最高质量的C代码,你可以从中学习。它有它的缺点,并不完全写得很好,但大部分情况下它是非常有效、清晰的代码。
如果从学习C的角度来看,那么可能对初学者来说会太过于压力山大。就C的使用而言,它最适用于需要可移植性和性能的应用程序。通常用于系统级编程。但这是以牺牲抽象为代价的。因此,与像Java或甚至C++这样的语言不同,您必须自己编写大部分代码。理想情况下,应用程序类型应确定语言选择,并且在操作系统方面,C是首选语言。
了解Linux内核的一种方法是从非常旧的Linux内核版本开始。这将包含实质内容并隐藏当前内核中存在的其他复杂性。这应足以理解基础知识。
这是否是“最佳实践”取决于你问的人是谁。在 Windows 平台上也有很多低级 C 程序编写,但如果你看一下它们(例如 WINDDK 的设备驱动程序示例),你会意识到微软已经成功地“发明”了另一种语言,他们称之为 C :-) 但是,如果你想在 Windows 上开发设备驱动程序,那么这些应该被视为“最佳实践”。
一个很好的方法是查看一些已经在使用中的开源编译器的代码。编写编译器需要良好的数据结构和指针技巧。
我认为内核是写模块化代码的很好例子。尽管它是用C编写的,但它有些面向对象。