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

控制流 ​

程序按顺序执行语句,从上到下。控制流语句改变这个顺序:让你在路径之间选择、重复代码块,或在多个选项中选择。本章涵盖三种主要的控制流机制——条件、迭代和多路选择——在 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 不改变这一点——相同的真值模型适用。

基于 MIT 许可发布。