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

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

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

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

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

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

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

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

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

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

深入c语言和程序运行原理(9)指针是如何灵活使用内存的?

“指针”是 C 语言为我们提供的最为强大的武器之一。借助指针,我们可以更加灵活地使用应用程序所享有的内存。 不同于 Python、Java 等语言,C 语言为我们提供了这样一种能力:可以让程序员根据需要,主动选择使用“按值传递”或“按指针传递”这两种不同的数据引用方式。通常,按值传递会涉及原始数据的复制过程,因此在某些情况下,可能会引入额外的性能开销。而按指针传递则使程序内存中的“数据共享”成为了
深入c语言和程序运行原理(9)指针是如何灵活使用内存的?

深入c语言和程序运行原理(10)预处理器是怎样处理程序代码的?

C 预处理器是 C 标准中的另一块重要内容。对代码进行预处理,是 C 源代码在被“真正”编译,并生成机器代码前的重要一环。合理使用预处理指令,可以让源代码根据不同的环境信息进行动态变化,并生成适合在当前环境下编译的 C 代码。这里我们提到的“环境”,一般与目标操作系统、CPU 体系架构,以及当前平台上各系统库的支持情况有关。 除此之外,预处理器还为我们提供了一定的能力,可以更加高效、灵活地组织 C
深入c语言和程序运行原理(10)预处理器是怎样处理程序代码的?

深入c语言和程序运行原理(11)字符、字符串处理与数学计算

在前面的 10 节课中,我主要围绕着 C 语言的七大关键语法,介绍了它们在机器指令层面的实现细节。而接下来,走出语法,从微观到宏观,我们将开始进一步探索 C 语法之外,那些可以用来支撑大型 C 项目构建的特性和技术。 因此,在这一模块中,我会介绍和 C 语言标准库、工程化,以及性能优化等相关的内容。C 标准库是除 C 基本核心语法外,C 语言的另一个重要组成部分。C 标准库中提供了众多的类型、函数
深入c语言和程序运行原理(11)字符、字符串处理与数学计算