毎回忘れるのでメモ。
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: 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