现代C:概念剖析和编程实践
上QQ阅读APP看书,第一时间看更新

第5章 基本值和数据

本章涵盖了:

  • 理解抽象状态机
  • 使用类型和值
  • 初始化变量
  • 使用命名常量
  • 类型的二进制表示

现在,我们将把重点从“如何做事情”(语句和表达式)转移到C程序操作的内容:C数据C。一个实例中的具体程序必须表示值。人类有一个类似的策略:现在我们使用十进制在纸上写数字,使用的是阿拉伯数字系统。但是我们有其他系统来写数字:例如,罗马数字(i、ii、iii、iv等等)或文本符号。要知道,单词“12”表示值“12”是一个非常重要的步骤,这提醒我们,欧洲语言不仅用十进制表示数字,而且还用其他系统来表示。英语和德语以12为基数混合,法语以16和20为基数。对于像我这样的法语是非母语的人士来说,很难将quatre vingt quinze(4乘以20加上15)与数值95联系起来。

类似地,计算机上值的表示也可能因体系结构的不同而“在文化上”不同,或者由程序员赋给值的类型来决定的。因此,如果我们想要编写可移植的代码,我们应该主要考虑值而不是表示。

如果你已经在C语言以及字节和位操作方面有了一些经验,那么你需在本章大部分的学习过程中努力“忘记”以前的知识。在电脑上思考值的具体表示将会妨碍你而不是帮助你。

要点5.1 C程序主要考虑的是值,而不是它们的表示形式。

在大多数情况下,你不必关心某个特定值的表示,编译器负责安排值和表示之间的来回转换。

本章中,我们将看到这个转换的不同部分是如何工作的。通常在程序中“争论”的理想世界是C的抽象状态机(5.1节)。它给出了程序执行的一个视图,该视图在很大程度上独立于程序运行的平台。这个机器状态的组成部分(即对象)都有一个固定的解释(它们的类型)和一个随时间变化的值。C的基本类型在5.2节中进行了描述,接着描述了我们如何表示这些基本类型的特定值(5.3节),如何在表达式中组合类型(5.4节),如何确保我们的对象一开始就具有所需的值(5.5节),如何为递归值命名(5.6节),以及这些值如何在抽象状态机中表示(5.7节)。