毎回忘れるのでメモ。
- std.process.argsAllocでコマンドライン引数を取得。
- std.process.argsFreeを呼び出す(- std.process.argsAllocのドキュメントに- Caller must call argsFree on result.と記載がある)
- 
- で取得した引数一覧をfor文でよしなにする。
 
const std = @import("std");
pub fn main() !void {
    const stdout = std.io.getStdOut().writer();
    const args = try std.process.argsAlloc(std.heap.page_allocator);
    defer std.process.argsFree(std.heap.page_allocator, args);
    for (args[1..], 0..) |arg, i| { //インデックス0は実行ファイル名なので1から始める
        try stdout.print("arg {}: {s}\n", .{ i, arg });
    }
}ビルドして生成されたファイルから実行
❯ zig build-exe arg-test.zig
❯ ./arg-test 100 200 300
arg 0: 100
arg 1: 200
arg 2: 300zig run コマンドから実行
# zig run コマンドは、以下の構成要素から成り立っている
# 1. 指定されたソースファイルをコンパイル(`~/.cache/zig/o/`配下とかに出力)
# 2. コンパイルされたバイナリを実行
#
# 実行時に引数を渡したいのであれば -- の後に渡す必要がある。
# -- がない場合、コンパイル時に渡すオプションと判断され、以下のようなエラーが発生する。
❯ zig run arg-test.zig 100 200 300
error: unrecognized file extension of parameter '100'
# -- のあとにコマンドライン引数を渡すと正常に実行される
❯ zig run arg-test.zig -- 100 200 300
arg 0: 100
arg 1: 200
arg 2: 300