const std = @import("std"); const testing = std.testing; const builtin = @import("builtin"); fn add(count: c_int, ...) callconv(.C) c_int { var ap = @cVaStart(); defer @cVaEnd(&ap); var i: usize = 0; var sum: c_int = 0; while (i < count) : (i += 1) { sum += @cVaArg(&ap, c_int); } return sum; } test "defining a variadic function" { if (builtin.cpu.arch == .aarch64 and builtin.os.tag != .macos) { // https://github.com/ziglang/zig/issues/14096 return error.SkipZigTest; } if (builtin.cpu.arch == .x86_64 and builtin.os.tag == .windows) { // https://github.com/ziglang/zig/issues/16961 return error.SkipZigTest; } try std.testing.expectEqual(@as(c_int, 0), add(0)); try std.testing.expectEqual(@as(c_int, 1), add(1, @as(c_int, 1))); try std.testing.expectEqual(@as(c_int, 3), add(2, @as(c_int, 1), @as(c_int, 2))); } // test