Skip to content
📖 Auto 版 Modern C本书目录

第五章:基本值与数据 ​

级别 1 — 入门

所有计算的基础:类型、值,以及 C 和 Auto 如何表示数据。

这是级别 1 中最重要的章节。你在 C 或 Auto 中构建的一切都建立在对语言如何在内存中表示值的理解之上。我们将涵盖抽象机器模型、基本类型、转换、初始化器、命名常量和二进制表示。


5.1 抽象状态机 ​

C 深入: C 标准并不描述一台物理计算机。相反,它定义了一个抽象状态机,规定了符合标准的程序必须做什么。真实编译器的工作是生成代码,使其表现得就像抽象状态机执行了该程序一样。

抽象状态机包括:

  • 对象——保存值的存储区域(变量、分配的内存)。
  • 值——存储在对象中的位模式,根据其类型进行解释。
  • 副作用——机器状态的改变(写入变量、调用 I/O 函数)。
  • 序列点——保证所有先前副作用完成的时刻。

当你写 int x = 42; 时,抽象状态机:

  1. 为名为 x 的对象分配存储空间。
  2. 确定其类型为 int。
  3. 将值 42 存储在该对象中。

Auto 通过移除未定义行为简化了这个模型。如果 Auto 程序能编译,它就有明确定义的语义。代价是 Auto 隐藏了 C 暴露的某些机器级细节(如原始指针算术和精确的对象布局)。

要点: C 的抽象状态机是你和编译器之间的契约。遵守契约,你的代码就是可移植和可预测的。违反它(例如通过未定义行为),编译器可以做任何事。


5.2 基本类型 ​

C 有一组小但精细的基本类型。Auto 将它们映射到更清晰的子集:

C 类型Auto 类型典型大小备注
charchar1 字节字符或小整数
signed chari81 字节显式有符号 8 位
unsigned charu81 字节无符号 8 位
shorti162 字节短整数
intint4 字节默认整数
longi644 或 8 字节平台相关
long longi648 字节至少 64 位
floatfloat4 字节单精度 IEEE 754
doublefloat8 字节双精度;Auto 用 float 统一表示
_Boolbool1 字节C99 布尔;Auto 有 bool
size_tusize4 或 8 字节无符号,sizeof 结果

主要区别:

  • C 的 double 与 float 是不同的类型。 Auto 将它们统一为 float,让编译器选择精度。
  • C 的每种整数类型都有有符号/无符号变体。 Auto 默认有符号,提供显式的 u8、u16、u32、u64 用于无符号需求。
  • C 的 char 可能是有符号或无符号的,取决于平台。Auto 将 char 视为仅用于字符数据的独立类型。

基于 MIT 许可发布。