allowzero

allowzero

포인터가 주소 0을 가질 수 있게 해 주는 포인터 속성이에요. 주소 0이 매핑 가능한, 그야말로 freestanding OS 타깃에서만 필요합니다. null 포인터를 표현하려면 이걸 쓰지 말고 Optional Pointers를 쓰세요. allowzero가 붙은 Optional Pointers는 일반 포인터와 크기가 같지 않아요.

아래 코드에서 만약 포인터에 allowzero 속성이 없었다면, 이 코드는 Pointer Cast Invalid Null 패닉이 됩니다.

const std = @import("std");
const expectEqual = std.testing.expectEqual;

test "allowzero" {
    var zero: usize = 0; // var to make to runtime-known
    _ = &zero; // suppress 'var is never mutated' error
    const ptr: *allowzero i32 = @ptrFromInt(zero);
    try expectEqual(0, @intFromPtr(ptr));
}
$ zig test test_allowzero.zig
1/1 test_allowzero.test.allowzero...OK
All 1 tests passed.

출처: Zig Documentation