C 编程/为什么要学习 C?
C 是最常用的编写 操作系统 的编程语言。第一个用 C 编写的操作系统是 Unix。后来像 GNU/Linux 这样的操作系统都是用 C 编写的。C 不仅是操作系统的语言,也是如今几乎所有流行的高级语言的先驱和灵感来源。事实上,Perl、PHP、Python 和 Ruby 都是用 C 编写的。
打个比方,假设你要学习西班牙语、意大利语、法语或罗马尼亚语。你觉得学习拉丁语会有帮助吗?就像拉丁语是所有这些语言的基础一样,学习 C 将使你能够理解和欣赏建立在 C 传统之上的整个编程语言家族。了解 C 意味着拥有自由。
学习 C 比学习 汇编语言 更大的原因是,对于给定的编程任务,用 C 编写代码比用汇编语言编写代码更容易、更快。使用 C,你将编写更少的代码行,更快地完成任务,并且比用汇编语言编写代码所需的脑力更少。而且,随着当今现代编译器的出现,从 C 源代码编译的可执行文件通常比使用汇编语言“手工”编写的可执行文件运行得更快。只有在极少数情况下,而且只有当你真正了解自己在做什么时,汇编语言才能在速度上比用可靠编译器编译的 C 代码有优势。
而且,使用 C,你不会牺牲对代码执行方式的低级控制权。一个典型的 C 语句通常只翻译成几个汇编指令。但 C 还为你提供了一个庞大的软件库,帮助你执行你不想费心编写的低级任务。
C 的另一个巨大优势是可移植性。不同的处理器具有不同的指令集。如果你想在每个要执行代码的计算机体系结构上重新编写和维护汇编代码,那将是一项繁重的任务。因此,C 的主要优势之一是它结合了跨各种计算机体系结构的通用性和可移植性,同时仍然让你拥有与汇编语言相同的低级硬件控制能力。这意味着你可以编写一次 C 源代码,并轻松地将其编译成二进制文件,以便在各种机器上使用。
例如,C 程序可以在 HP 50g 计算器 (ARM 处理器)、TI-89 计算器 (68000 处理器)、Palm OS Cobalt 智能手机 (ARM 处理器)、初代 iMac (PowerPC)、Arduino (Atmel AVR) 和 Intel iMac (Intel Core 2 Duo) 上编译和运行。这些设备中的每一个都有自己的汇编语言,它们完全不兼容于任何其他设备的汇编语言。C 使得你的代码能够在这些机器上以更少的努力运行。
所以,难怪 C 如此受欢迎呢?
就像多米诺骨牌一样,下一代程序遵循其祖先的趋势。用 C 设计的操作系统总是带有用 C 设计的系统库。这些系统库反过来被用来创建更高级的库(如 OpenGL 或 GTK),而这些库的设计者通常会选择使用系统库使用的语言。应用程序开发人员使用更高级的库来设计文字处理软件、游戏、媒体播放器等。他们中的许多人会选择用更高级的库使用的语言进行编程。这种模式不断地延续下去...
也就是说,学习汇编语言很有趣,也很有意义,因为它可以让你深入了解计算机在非常低的级别是如何工作的。学习汇编语言绝对有助于你成为更熟练的 C 程序员。因此,我们鼓励你学习汇编语言,但当需要进行实际工作时,你绝对会想要用 C 来完成它。
C 的主要设计目的是在保持性能和最小化占用空间 (CPU 时间、内存 使用量、磁盘 I/O 等) 的同时,生成可移植的代码。这对于 操作系统、嵌入式系统 或其他性能非常重要的程序 (“高级”接口会影响性能) 非常有用。使用 C,你可以相对轻松地了解给定代码行实际上做了什么,因为大多数事情都明确地写在了代码中。C 在低级应用程序方面拥有庞大的代码库。它是 UNIX 的“原生”语言,这使得它灵活且可移植。它是一种稳定且成熟的语言,不太可能在很长一段时间内消失,并且已移植到大多数,如果不是全部,平台。
一个强大的原因是内存分配。与大多数编程语言不同,C 允许程序员直接写入内存。C 中的关键结构,如结构体、指针和数组,旨在以一种高效且与机器无关的方式来结构化和操作内存。特别是,C 允许控制数据结构的内存布局。此外,动态内存分配受程序员控制(这也意味着内存释放必须由程序员完成)。像 Java 和 Perl 这样的语言为程序员屏蔽了大多数内存分配和指针细节(除了 内存泄漏 和一些其他形式的过度内存使用)。这可能很有用,因为在构建高级程序时处理内存分配是一个高度容易出错的过程。但是,在处理低级代码(如操作系统中控制设备的部分)时,C 提供了一个统一、简洁的接口。这些功能在大多数其他语言中并不存在。
虽然 Perl、PHP、Python 和 Ruby 可能功能强大,并且默认情况下支持 C 中没有提供的许多功能,但它们通常不是用自己的语言实现的。相反,大多数这样的语言最初都依赖于用 C(或其他高性能编程语言)编写,并且需要将它们的实现移植到新的平台才能使用。
与所有编程语言一样,你是否选择 C 而不是其他高级语言是一个见仁见智的问题,技术和业务需求都可能决定需要哪种语言。