Primitive Types — Zig가 기본으로 제공하는 타입

Primitive Types — Zig가 기본으로 제공하는 타입

이제 Zig 언어가 처음부터 갖고 있는 **원시 타입(primitive types)**을 살펴볼게요. 별도 import 없이 바로 쓸 수 있는 내장 타입들을 표로 정리해 봤는데, 각 타입이 어떤 크기를 다루는지, C에서 무엇에 해당하는지가 핵심이에요. 어떤 것들은 이름만 봐도 짐작이 가지만, comptime_int처럼 생소하게 느껴지는 것도 있죠. 하나씩 훑어보며 익숙해져 봐요.

출처: Zig Documentation

본문

아래 표는 Zig의 기본 타입을 타입(Type), C에서의 대응(C Equivalent), 설명(Description) 세 묶음으로 보여줘요. 코드와 식별자는 그대로 보존했으니 표에서 타입 이름을 직접 확인해 봐요.

Type C Equivalent Description
i8 int8_t 8비트 부호 있는 정수(signed integer)
u8 uint8_t 8비트 부호 없는 정수(unsigned integer)
i16 int16_t 16비트 부호 있는 정수
u16 uint16_t 16비트 부호 없는 정수
i32 int32_t 32비트 부호 있는 정수
u32 uint32_t 32비트 부호 없는 정수
i64 int64_t 64비트 부호 있는 정수
u64 uint64_t 64비트 부호 없는 정수
i128 __int128 128비트 부호 있는 정수
u128 unsigned __int128 128비트 부호 없는 정수
isize intptr_t, ssize_t 포인터 크기의 부호 있는 정수
usize uintptr_t, size_t 포인터 크기의 부호 없는 정수. #5185도 참고해요
c_char char C와 ABI 호환을 위한 타입
c_short short C와 ABI 호환을 위한 타입
c_ushort unsigned short C와 ABI 호환을 위한 타입
c_int int C와 ABI 호환을 위한 타입
c_uint unsigned int C와 ABI 호환을 위한 타입
c_long long C와 ABI 호환을 위한 타입
c_ulong unsigned long C와 ABI 호환을 위한 타입
c_longlong long long C와 ABI 호환을 위한 타입
c_ulonglong unsigned long long C와 ABI 호환을 위한 타입
c_longdouble long double C와 ABI 호환을 위한 타입
f16 _Float16 16비트 부동소수점(가수 10비트) IEEE-754-2008 binary16
f32 float 32비트 부동소수점(가수 23비트) IEEE-754-2008 binary32
f64 double 64비트 부동소수점(가수 52비트) IEEE-754-2008 binary64
f80 long double 80비트 부동소수점(가수 64비트) IEEE-754-2008 80-bit 확장 정밀도
f128 _Float128 128비트 부동소수점(가수 112비트) IEEE-754-2008 binary128
bool bool true 또는 false
anyopaque void 타입이 지워진 포인터(type-erased pointers)에 쓰여요
noreturn (none) break, continue, return, unreachable 그리고 while (true) {}의 타입
type (none) 모든 타입의 타입
anyerror (none) 에러 코드
comptime_int (none) comptime에 알려진 값에만 허용돼요. 정수 리터럴의 타입
comptime_float (none) comptime에 알려진 값에만 허용돼요. 부동소수점 리터럴의 타입

위 정수 타입들 외에도, iu 뒤에 숫자를 붙인 식별자로 임의 비트 폭의 정수를 참조할 수 있어요. 예를 들어 i7은 부호 있는 7비트 정수를 뜻해요. 정수 타입의 최대 허용 비트 폭은 65535예요.

더 알아보기