控制流
程序按顺序执行语句,从上到下。控制流语句改变这个顺序:让你在路径之间选择、重复代码块,或在多个选项中选择。本章涵盖三种主要的控制流机制——条件、迭代和多路选择——在 C 和 Auto 两个语言中。
3.1 条件执行
最基本的控制流构造是条件:根据条件决定做这个还是做那个。
C 的 if/else
在 C 中,if 求值一个表达式。如果结果非零,执行第一个分支。否则,执行 else 分支(如果有的话):
c
if (x > 0) {
printf("positive\n");
} else if (x < 0) {
printf("negative\n");
} else {
printf("zero\n");
}对于单语句分支,循环体周围的花括号是可选的,但现代 C 风格总是使用它们。这可以防止一类 bug:维护编辑添加第二条语句但忘记加花括号。
Auto 的 if/else
Auto 使用相同的逻辑结构,但条件不需要括号:
auto
if x > 0 {
print("positive")
} else if x < 0 {
print("negative")
} else {
print("zero")
}Auto 要求所有分支都使用花括号。没有"可选花括号"规则。这完全消除了悬空 else 歧义和忘记单语句花括号的 bug。
真与假
在 C 中,真假很简单:零为假,其他一切为真。这适用于所有标量类型:
c
if (42) // 真
if (0) // 假
if (3.14) // 真
if (0.0) // 假
if (ptr) // 如果 ptr 不是 NULL 则为真
if (!ptr) // 如果 ptr 是 NULL 则为真Auto 继承了相同的模型。非零值为真,零为假。bool 类型提供显式的布尔值 true 和 false,但任何条件表达式的工作方式与 C 相同。
C 深潜: 在 C 中,每个标量值都有真值解释:零为假,非零为真。这意味着
if (ptr)、if (count)和if (difference != 0)都是有效的条件。现代 C 的建议是明确的:"不要与 0、false 或 null 比较。"但这是一种风格选择,许多 C 程序员更喜欢显式比较以增加清晰度。Auto 不改变这一点——相同的真值模型适用。