Skip to content

zigのコマンドライン引数メモ

Published:

毎回忘れるのでメモ。

  1. std.process.argsAllocでコマンドライン引数を取得。
  2. std.process.argsFree を呼び出す(std.process.argsAllocのドキュメントにCaller must call argsFree on result.記載がある
    1. で取得した引数一覧を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: 300

zig 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

参考

https://ziggit.dev/t/read-command-line-arguments/220