为什么要学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 源代码,然后轻松地将其编译成在各种机器上使用的二进制文件。

例如,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 而不是其他语言?
C 的主要设计目的是在保持性能并最小化占用空间(如 CPU 时间、内存使用、磁盘 I/O 等)的同时,产生可移植的代码。这对于操作系统、嵌入式系统或其他性能要求很高的程序非常有用(“高级”接口会影响性能)。使用 C,保持对一行代码实际做什么的心智图像相对容易,因为大多数东西都在代码中显式编写。C 语言为低级应用提供了庞大的代码库。它是 UNIX 的“本地”语言,使其灵活且具有可移植性。它是一种稳定且成熟的语言,不太可能在很长时间内消失,并且已经被移植到大多数(如果不是所有的话)平台上。

其中一个“强大的理由”(不管那是什么意思)是内存分配。与大多数编程语言不同,C 允许程序员直接操作内存。C 中的关键构造如结构体、指针和数组被设计为以高效且与机器无关的方式组织和操作内存。特别是,C 提供了对数据结构内存布局的控制。此外,动态内存分配由程序员控制(这也意味着内存释放必须由程序员来完成)。像 Java 和 Perl 这样的语言将程序员从大多数内存分配和指针的管理中屏蔽(除了内存泄漏和一些其他形式的过度内存使用)。这在构建高级程序时非常有用,因为内存分配是一个容易出错的过程。然而,在处理低级代码时,例如操作系统中控制设备的部分,C 提供了一个统一且简洁的接口。这些功能在大多数其他语言中并不存在。

虽然 Perl、PHP、Python 和 Ruby 可能很强大并支持 C 中默认不提供的许多功能,但它们通常不是用自己的语言实现的。相反,大多数此类语言最初依赖于用 C(或其他高性能编程语言)编写,并且它们的实现需要移植到新平台才能使用。

像所有编程语言一样,是否选择 C 而不是其他高级语言是一个主观看法问题,技术和商业需求也可能决定需要使用哪种语言。

最后修改: 2025年01月12日 星期日 09:26