zig 安装,Hello World 示例

news/2025/1/15 4:16:03/

1. 安装 Zig

首先,你需要在你的计算机上安装 Zig 编译器。你可以从 Zig 官方网站 下载适合你操作系统的版本。

安装完成后,你可以在终端中运行以下命令来检查 Zig 是否安装成功:

zig version

如果一切正常,它会显示 Zig 的版本信息。

2. Hello World 示例

在 Zig 中,你可以编写一个简单的 “Hello, World!” 程序来开始:

创建一个名为 hello.zig 的文件,并输入以下代码:

const std = @import("std");pub fn main() void {std.debug.print("Hello, World!\n", .{});
}

这段代码做了什么:

  • @import("std"):导入标准库。
  • std.debug.print:打印输出到控制台。
  • pub fn main():定义了一个公共的 main 函数,这是程序的入口。

接着,在命令行中编译并运行它:

zig run hello.zig

3. 基础语法

你需要了解 Zig 的一些基本概念和语法:

  • 变量声明

    var x: i32 = 10;  // 声明一个整数变量
    const y = 20;      // 使用常量,不需要显式类型
    
  • 函数
    函数定义是通过 fn 关键字:

    fn add(a: i32, b: i32) i32 {return a + b;
    }
    
  • 控制流
    Zig 支持常见的控制流结构,如 if, while, for 等:

    if (x > 10) {std.debug.print("x is greater than 10\n", .{});
    } else {std.debug.print("x is not greater than 10\n", .{});
    }
    

4. 错误处理

Zig 使用显式的错误处理机制,这与许多现代编程语言不同。错误会被显示地传递并处理。

例如:

const std = @import("std");// 定义一个自定义错误类型
const DivisionByZeroError = error.DivisionByZero;fn divide(a: i32, b: i32) !i32 {if (b == 0) {return DivisionByZeroError; // 返回错误,表示除数为零}return @divTrunc(a, b); // 使用 @divTrunc 进行有符号整数除法
}
pub fn main() void {// 使用 try-catch 来处理错误const result = divide(10, 0) catch |err| {std.debug.print("Caught error: {}\n", .{err});return; // 返回,终止程序};std.debug.print("{}", .{result});
}
  • ! 代表一个可以返回错误的类型。
  • 使用 catch 来捕获错误,使用 catch 可以捕获 DivisionByZeroError 并进行处理,而不是让程序崩溃。
  • 解释:
    catch: 如果 divide 返回错误,catch 会捕获到并将其处理。在这个例子中,我们捕获了 DivisionByZeroError 错误并打印出错误信息。
    return: 如果发生错误,程序会终止并不会继续执行。
    没有崩溃: 程序不会因错误而崩溃,反而会在发生错误时进行捕获和处理。

5. 编译时计算

Zig 强大的编译时计算能力允许你在编译阶段执行某些操作。例如:

const std = @import("std");// 直接在编译时计算常量
const compile_time_value = 42; // 编译时计算常量pub fn main() void {// 打印编译时计算的结果std.debug.print("Compile time value: {}\n", .{compile_time_value});
}

comptime 块中,Zig 会在编译时计算出 compile_time_value 的值。

6. Zig 编译器工具

Zig 不仅是编程语言,它的编译器工具链也非常强大。你可以使用 zig build 来构建更复杂的项目,或者使用 zig run 来直接运行一个 Zig 文件。

你还可以使用 zig build 来创建一个项目的构建系统,类似于 CMake 或 Makefile。

学习资源:

  • 官方文档:Zig Documentation
  • 学习指南:Zig Learn
  • Zig 论坛:Zig Users Forum

http://www.ppmy.cn/news/1563218.html

相关文章

vue使用自动化导入api插件unplugin-auto-import,避免频繁手动导入

‌unplugin-auto-import‌是一个现代的自动导入插件,旨在简化前端开发中的导入过程,减少手动导入的繁琐工作,提升开发效率。它支持多种构建工具,包括Vite、Webpack、Rollup和esbuild,并且可以与TypeScript配合使用&…

PDF如何提取文字?OCR技术快速识别提取PDF中的文字内容!这种简单方法一定要知道!

在日常工作中,我们常常会遇到PDF文档和图纸中的文字无法直接复制粘贴的问题,尤其是那些文字呈现为打散线条或扫描图片形式的文件,给我们的工作带来诸多不便。不过别担心,PDF快速看图软件的“提取文字”功能(基于OCR技术…

校园跑腿小程序---轮播图,导航栏开发

hello hello~ ,这里是 code袁~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 🦁作者简介:一名喜欢分享和记录学习的在校大学生…

性能测试工具Jmeter负载模拟

目录 场景设置 线性属性 补充知识:java线程一般有以下5种状态 场景运行 1.GUI运行测试 2.非GUI运行测试 在Jmeter测试计划中可以实现场景,负载,监听的功能。场景是用来尽量模拟用户的真实操作的工作单元,Jmeter场景主要通过…

2、docker网络和资源控制

docker网络 docker网络的类型 桥接模式:这是docker默认的网络模式,桥接模式工作在第二层,也就是数据链路层。 1、安装完成docker时,docker会自动创建一个虚拟的网络桥,类似于交换机。 2、分配唯一的ip地址&#xf…

mysql窗口函数rank() over、dense_rank() over、row_number() over 实现分组排行

在做导出时,遇到一个根据价格最低数统计,所以用到了序号排行,数据库用的8.0.33; 正好mysql 8.0以上版本支持窗口函数 总结一下几种函数: 1、row_number() row_number()over(partition by字段1 order by 字段2) 的结…

MyBatis 性能优化

1. 引言 1.1 什么是 MyBatis? MyBatis 是一款流行的 Java 持久层框架,能够将 Java 对象与 SQL 数据库映射起来。与传统的 JDBC 不同,MyBatis 提供了灵活的 SQL 映射功能,使开发者可以专注于业务逻辑,而无需编写冗长的…

21天学通C++第八章——指针

C虽然可以动态的管理内存,但是并不能像其他高级语言如JAVA、C#有自动垃圾收集器去对应用程序的内存进行清理。 常见指针错误 内存泄漏 解释: 在使用完new申请内存之后,没有配套的delete,则之后会产生内存泄漏。 即如何理解&a…