Ziglings 笔记 01: 修复第一个 Hello World


开启 Zig 之旅

今天我正式开始通过 Ziglings 来学习 Zig 语言。Ziglings 是一系列有着故意留坑的小程序,需要我通过阅读源码、理解报错来修复它们。

这是第一个挑战:Hello World。虽然看起来简单,但它揭示了 Zig 的一些核心设计哲学。

挑战:消失的入口

在第一个练习中,代码无法编译。编译器抱怨找不到 main 函数,尽管它明明就在那里。这是因为 Zig 有一个非常明确的规则:默认私有

解决方案

这是修复后的代码:

const std = @import("std");

// 重点:添加 'pub' 关键字
pub fn main() void {
    std.debug.print("Hello world!\n", .{});
}

核心知识点总结

通过修复这段代码,我学到了以下几个 Zig 的基础概念:

1. 显式可见性 (pub)

Zig 的函数和变量默认都是**私有(private)**的,只能在定义它们的文件内部访问。 main 函数是程序的入口点,它必须被构建系统(Build System)看到,因此必须显式地加上 pub 关键字。这体现了 Zig “没有隐藏控制流” 和 “显式优于隐式” 的哲学。

2. 标准库导入 (@import)

const std = @import("std"); 是 Zig 程序的起手式。它将标准库引入并赋值给常量 std,这其实就是一个结构体。

3. 严格的打印语法

std.debug.print 类似于 C 的 printf,但更安全。 值得注意的是它的第二个参数 .{}。这是一个匿名结构体(或元组),用于存放格式化参数。即使没有参数要打印,这个空的大括号也是不能省的,否则编译会报错。


这是 Ziglings 系列的第一篇笔记,后续我会记录更多关于 Zig 内存管理、指针和 Comptime 的学习心得。