C 语言为我们提供了高于机器指令的一定抽象能力,这使得我们能够以接近自然语言的方式来构建应用程序。如果说使用 C 语言是用砖块来造房子,那使用其他高抽象粒度编程语言,就是直接以墙面为单位来搭建。很明显,从这个角度来说,C 语言用起来不如其他高级语言方便,但它也同时给予了更细的构建粒度,让我们能够按照自己的想法,灵活自定 […]

2022年10月8日 658点热度 Baimi 阅读全文

在上一讲中,我们主要围绕着 x86-64 平台上 C 函数被调用时需要遵循的一系列规则,即 System V AMD64 ABI 调用规范的内容展开了深入的探讨。而今天,我们将继续讨论有关 C 函数的话题,来看看参数求值顺序、递归调用、旧式声明的相关内容。这些内容将会帮助你更加深入地理解 C 函数的运作细节,写出更加健 […]

2022年10月7日 523点热度 Baimi 阅读全文

在前面介绍了 C 语言中的运算符、表达式、语句是如何被编译器实现的。不知你是否还记得,在介绍运算符时,我没有展开讲解有关函数调用运算符的内容。接下来,我就用专门的两讲内容,来带你深入看看 C 语言中有关函数调用的那些事儿。 这一讲,我们首先来看 C 语言中,编译器实现函数调用时所遵循的一系列规则。这些规则实际影响着函数 […]

2022年10月6日 645点热度 Baimi 阅读全文

上一讲主要介绍了编译器是如何使用机器指令来实现各类 C 运算符的。在应用程序的构建过程中,运算符仅作为“计算单元”,为程序提供了基本的“原子”计算能力。而数据如何同时使用多种不同的运算符,以及按照怎样的逻辑来在不同位置上“流动”,这一切都是由表达式和语句进行控制的。这一讲来看看 C 语言中,用来描述程序运行逻辑的这两种 […]

2022年10月2日 730点热度 Baimi 阅读全文

运算符(operator)、表达式(expression)和语句(statement)是组成 C 程序的三个最基本的语法结构。在 C 语言中,这三种概念之间一般呈“包含”关系,即表达式中通常含有运算符,而语句中也可以包含有表达式。最终,众多的语句便组成了一个完整的 C 程序。 可见,一个完整的 C 程序是由不同粒度的语 […]

2022年10月2日 927点热度 Baimi 阅读全文

从这一讲开始,我们将围绕 C 语言的七大类核心语法,深入探寻隐藏在语法背后,程序代码的实际执行细节。 C 语言让我们能够用一种可移植、结构化,且具有人类可理解语义的方式,构建我们的程序。C 标准中详细描述了 C 语言在语法和语义两个层面的基本内容,但对于实现者,比如编译器来说,如何将这些语法和语义体现在具体的机器指令( […]

2022年9月28日 845点热度 Baimi 阅读全文

在深入了解 C 语言、做到“知其所以然”之前,我们需要先做到“知其然”,也就是知道 C 语言是如何使用的。所以这一讲,会从语法细节和语言特性、微观和宏观相结合的角度,带你快速、直观地回顾 C 语言的一些基础内容。而通过本讲的学习,你也会更容易理解这门课接下来的内容。 首先,我会带你回顾一个 C 程序从源代码编写到编译, […]

2022年9月28日 705点热度 Baimi 阅读全文

  相信来学习这门课的大部分同学,都或多或少接触过一些 C 语言的基础知识。但是,我认为掌握 C 语言的基本语法并不困难,更重要的是能够灵活、高效地使用这门语言,并通过观察语言背后机器的执行细节,来深入了解关于编译优化、程序执行,以及计算机体系结构等其他相互关联的知识。 C 语言是工作中使用最多的语言之一。由 […]

2022年9月28日 1084点热度 Baimi 阅读全文