深入c语言和程序运行原理(8)枚举、结构与联合是如何实现的?

C 语言为我们提供了高于机器指令的一定抽象能力,这使得我们能够以接近自然语言的方式来构建应用程序。如果说使用 C 语言是用砖块来造房子,那使用其他高抽象粒度编程语言,就是直接以墙面为单位来搭建。很明显,从这个角度来说,C 语言用起来不如其他高级语言方便,但它也同时给予了更细的构建粒度,让我们能够按照自己的想法,灵活自定义墙面的形态。 对于这里提到的砖块和墙面,你可以将它们简单理解为编程语言在构建程
深入c语言和程序运行原理(8)枚举、结构与联合是如何实现的?

深入C语言和程序运行原理(7)函数是如何被调用的(下)?

在上一讲中,我们主要围绕着 x86-64 平台上 C 函数被调用时需要遵循的一系列规则,即 System V AMD64 ABI 调用规范的内容展开了深入的探讨。而今天,我们将继续讨论有关 C 函数的话题,来看看参数求值顺序、递归调用、旧式声明的相关内容。这些内容将会帮助你更加深入地理解 C 函数的运作细节,写出更加健壮、性能更高的代码。 编写不依赖于参数求值顺序的函数 当一个函数被调用时,传递给
深入C语言和程序运行原理(7)函数是如何被调用的(下)?

深入C语言和程序运行原理(6)函数是如何被调用的(上)?

在前面介绍了 C 语言中的运算符、表达式、语句是如何被编译器实现的。不知你是否还记得,在介绍运算符时,我没有展开讲解有关函数调用运算符的内容。接下来,我就用专门的两讲内容,来带你深入看看 C 语言中有关函数调用的那些事儿。 这一讲,我们首先来看 C 语言中,编译器实现函数调用时所遵循的一系列规则。这些规则实际影响着函数调用时,在如何传参、如何使用寄存器和栈内存等问题上的处理细节。 除此之外,由于
深入C语言和程序运行原理(6)函数是如何被调用的(上)?

深入C语言和程序运行原理(5)表达式和语句是如何协调程序运行的

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

深入C语言和程序运行原理(4)运算符是如何工作的

运算符(operator)、表达式(expression)和语句(statement)是组成 C 程序的三个最基本的语法结构。在 C 语言中,这三种概念之间一般呈“包含”关系,即表达式中通常含有运算符,而语句中也可以包含有表达式。最终,众多的语句便组成了一个完整的 C 程序。 可见,一个完整的 C 程序是由不同粒度的语法单元自下而上一层层构建出来的。而在这层语法形式之下,运算符、表达式和语句究竟是
深入C语言和程序运行原理(4)运算符是如何工作的

深入C语言和程序运行原理(3)数据与量值是如何被组织的?

从这一讲开始,我们将围绕 C 语言的七大类核心语法,深入探寻隐藏在语法背后,程序代码的实际执行细节。 C 语言让我们能够用一种可移植、结构化,且具有人类可理解语义的方式,构建我们的程序。C 标准中详细描述了 C 语言在语法和语义两个层面的基本内容,但对于实现者,比如编译器来说,如何将这些语法和语义体现在具体的机器指令(汇编代码)上,标准并未给出详细规定。 所以问题来了:在这层抽象背后,一个 C 程
深入C语言和程序运行原理(3)数据与量值是如何被组织的?

深入C语言和程序运行原理(2)一个 C 程序的完整生命周期

在深入了解 C 语言、做到“知其所以然”之前,我们需要先做到“知其然”,也就是知道 C 语言是如何使用的。所以这一讲,会从语法细节和语言特性、微观和宏观相结合的角度,带你快速、直观地回顾 C 语言的一些基础内容。而通过本讲的学习,你也会更容易理解这门课接下来的内容。 首先,我会带你回顾一个 C 程序从源代码编写到编译,再到最后运行的完整过程。除此之外,我还会用一段相对复杂的示例代码,来带你快速回顾
深入C语言和程序运行原理(2)一个 C 程序的完整生命周期

深入C语言和程序运行原理(1)— 如何更好地拥抱现代 C 语言?

  相信来学习这门课的大部分同学,都或多或少接触过一些 C 语言的基础知识。但是,我认为掌握 C 语言的基本语法并不困难,更重要的是能够灵活、高效地使用这门语言,并通过观察语言背后机器的执行细节,来深入了解关于编译优化、程序执行,以及计算机体系结构等其他相互关联的知识。 C 语言是工作中使用最多的语言之一。由于 C 语言语法简单、抽象层次较低,能够通过它在进行原型验证时精确地控制程序的运
深入C语言和程序运行原理(1)— 如何更好地拥抱现代 C 语言?