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

第七章:函数 ​

级别 1 — 入门

将逻辑封装为可重用、可组合的单元。

函数是组织代码的主要机制。函数接受输入(参数),执行计算,并产生输出(返回值)。C 和 Auto 共享相同的基本模型,但在语法、类型表达和安全保证上有所不同。


7.1 简单函数 ​

C 函数有返回类型、名称、参数列表和函数体:

c
// C
int max(int a, int b) {
    if (a > b) {
        return a;
    } else {
        return b;
    }
}

Auto 函数使用 fn 关键字,类型注解在参数名之后:

auto
// Auto
fn max(a int, b int) int {
    if a > b { a } else { b }
}

主要区别:

特性CAuto
关键字无(返回类型在前)fn
返回类型函数名之前参数列表之后
参数语法int a, int ba int, b int
返回语句return expr;最后表达式或 return
空参数void空 ()
缺少返回值未定义行为编译错误

隐式返回: 在 Auto 中,块中的最后一个表达式是其值。当函数体是单个表达式或最后一个表达式是预期的返回值时,不需要显式 return 关键字:

auto
fn square(x int) int {
    x * x             // 隐式返回
}

fn clamp(val int, lo int, hi int) int {
    max(lo, min(val, hi))    // 隐式返回
}

前向声明: 在 C 中,函数必须在使用前声明。这通常需要在文件顶部写前向声明(原型):

c
int min(int a, int b);     // 前向声明
int max(int a, int b) { ... }
int clamp(int v, int lo, int hi) { return max(lo, min(v, hi)); }
int min(int a, int b) { return a < b ? a : b; }

Auto 不需要前向声明。编译器在单次遍历中解析函数引用,所以你可以在定义之前调用函数:

auto
fn clamp(val int, lo int, hi int) int {
    max(lo, min(val, hi))
}

fn max(a int, b int) int {
    if a > b { a } else { b }
}

fn min(a int, b int) int {
    if a < b { a } else { b }
}

基于 MIT 许可发布。