키워드 참조
키워드 참조 (Keyword Reference)
Zig 코드를 읽다 보면 자주 마주치는 키워드들, 그리고 그 키워드가 정확히 뭘 하는지 한눈에 정리해 둔 표예요. 문법을 외우기보다는, 코드를 볼 때 "이 키워드가 여기서 왜 나왔지?" 싶은 순간에 찾아보는 참조 자료로 쓰면 좋아요. 특히 각 키워드마다 자세한 설명이 있는 섹션 링크를 함께 걸어 뒀으니, 더 깊이 알고 싶은 건 해당 칸을 타고 들어가면 돼요.
본문
addrspace
addrspace 키워드 자체를 소개하는 항목이에요. (아직 상세 문서가 준비 중이에요 — TODO로 표시돼 있어요.)
align
align은 포인터의 정렬(alignment)을 지정할 때 써요. 또 변수나 함수 선언 뒤에 붙여서, 그 변수·함수를 가리키는 포인터의 정렬을 지정할 수도 있어요. 더 자세한 내용은 Alignment 섹션을 봐요.
allowzero
포인터 속성 allowzero는 포인터가 주소 0을 가질 수 있게 해 줘요. 자세한 내용은 allowzero 섹션에 있어요.
and
불리언 연산자 and예요. Operators 섹션을 참고해요.
anyframe
anyframe은 함수 프레임을 가리키는 포인터를 담는 변수의 타입으로 쓸 수 있어요. 자세한 내용은 Async-Functions 섹션을 봐요.
anytype
함수 매개변수는 타입 자리에 anytype으로 선언할 수 있어요. 이때 실제 타입은 함수가 호출되는 지점에서 추론돼요. 자세한 내용은 Function-Parameter-Type-Inference 섹션을 참고해요.
asm
asm은 인라인 어셈블리(assembly) 표현식을 시작해요. 컴파일할 때 생성되는 머신 코드를 직접 제어할 수 있게 해 주죠. 자세한 내용은 Assembly 섹션을 봐요.
break
break는 블록 라벨과 함께 쓰면 블록에서 값을 반환할 수 있어요. 또 반복이 자연스럽게 끝나기 전에 루프를 빠져나가는 데도 써요. 자세한 내용은 Blocks, while, for 섹션을 참고해요.
callconv
callconv는 함수 타입에서 호출 규약(calling convention)을 지정할 때 써요. 자세한 내용은 Functions 섹션에 있어요.
catch
catch는 앞에 온 표현식이 에러로 평가되면 대신 다른 표현식을 평가할 때 써요. catch 뒤의 표현식은 에러 값을 선택적으로 받아올 수 있어요. 자세한 내용은 catch, Operators 섹션을 참고해요.
comptime
선언 앞에 comptime을 붙이면 그 변수나 함수 매개변수를 컴파일 타임에 알려진 값으로 표시해요. 또 표현식이 컴파일 타임에 실행되도록 보장하는 데도 쓸 수 있어요. 자세한 내용은 comptime 섹션을 봐요.
const
const는 수정할 수 없는 변수를 선언해요. 포인터 속성으로 쓰이면, 그 포인터가 가리키는 값을 수정할 수 없다는 뜻이 돼요. 자세한 내용은 Variables 섹션을 참고해요.
continue
continue는 루프 안에서 루프의 시작 지점으로 되돌아갈 때 써요. 자세한 내용은 while, for 섹션을 봐요.
defer
defer는 제어 흐름이 현재 블록을 벗어날 때 표현식을 실행하게 해요. 자세한 내용은 defer 섹션에 있어요.
else
else는 if, switch, while, for 표현식에 대체 분기를 제공할 때 써요. if 뒤에 쓰면 테스트 값이 false, null, 또는 에러일 때 else 분기가 실행돼요. switch 안에서 쓰면 테스트 값이 다른 어떤 case와도 맞지 않을 때 실행되고, 루프 뒤에 쓰면 루프가 break 없이 마무리됐을 때 실행돼요. 자세한 내용은 if, switch, while, for 섹션을 참고해요.
enum
enum은 열거형 타입을 정의해요. 자세한 내용은 enum 섹션을 봐요.
errdefer
errdefer는 함수가 에러를 반환할 때 제어 흐름이 현재 블록을 벗어나면 표현식을 실행하게 해요. 자세한 내용은 errdefer 섹션에 있어요.
error
error는 에러 타입을 정의해요. 자세한 내용은 Errors 섹션을 참고해요.
export
export는 함수나 변수가 생성된 오브젝트 파일에서 외부로 보이게 만들어요. export된 함수는 기본적으로 C 호출 규약을 따라요. 자세한 내용은 Functions 섹션을 봐요.
extern
extern은 정적 링킹 시에는 링크 타임에, 동적 링킹 시에는 런타임에 해석되는 함수나 변수를 선언할 때 써요. 자세한 내용은 Functions 섹션을 참고해요.
fn
fn은 함수를 선언해요. 자세한 내용은 Functions 섹션에 있어요.
for
for 표현식은 슬라이스, 배열, 또는 튜플의 요소들을 반복할 때 써요. 자세한 내용은 for 섹션을 봐요.
if
if 표현식은 불리언 표현식, 옵셔널 값, 또는 에러 유니온을 테스트할 수 있어요. 옵셔널 값이나 에러 유니언의 경우, if 표현식이 언랩(unwrap)된 값을 잡아낼 수도 있어요. 자세한 내용은 if 섹션을 참고해요.
inline
inline은 루프 표현식 앞에 붙여서 컴파일 타임에 루프를 펼치(unroll)게 할 수 있어요. 또 함수를 모든 호출 지점에서 인라인되도록 강제하는 데도 써요. 자세한 내용은 inline-while, inline-for, Functions 섹션을 봐요.
linksection
linksection 키워드는 함수나 전역 변수가 들어갈 섹션(예: .text)을 지정할 때 써요.
noalias
noalias 키워드 자체를 소개하는 항목이에요. (아직 상세 문서가 준비 중이에요 — TODO로 표시돼 있어요.)
noinline
noinline은 함수가 모든 호출 지점에서 인라인되지 않도록 막아요. 자세한 내용은 Functions 섹션을 참고해요.
nosuspend
nosuspend는 블록, 문장, 또는 표현식 앞에 붙여서, 일시 중단(suspension) 지점이 하나도 없는 범위라는 걸 표시해요. nosuspend 범위 안에서는 특히 이렇게 돼요. suspend 키워드를 쓰면 컴파일 에러가 나요. 아직 완료되지 않은 함수 프레임에 await을 쓰면 안전 검사로 Illegal-Behavior를 일으켜요. 비동기 함수를 호출하는 것도 await async some_async_fn()과 같아서 await을 포함하므로, 안전 검사로 Illegal-Behavior를 일으킬 수 있어요. nosuspend 범위 안의 코드는 바깥 함수를 Async-Functions로 만들지 않아요. 자세한 내용은 Async-Functions 섹션을 봐요.
opaque
opaque는 불투명(opaque) 타입을 정의해요. 자세한 내용은 opaque 섹션을 참고해요.
or
불리언 연산자 or예요. Operators 섹션을 봐요.
orelse
orelse는 앞에 온 표현식이 null로 평가되면 대신 다른 표현식을 평가할 때 써요. 자세한 내용은 Optionals, Operators 섹션을 참고해요.
packed
struct 정의 앞의 packed 키워드는 그 구조체의 메모리 레이아웃을 보장된 packed 레이아웃으로 바꿔요. 자세한 내용은 packed-struct 섹션을 봐요.
pub
최상위 선언 앞의 pub은 그 선언을 선언된 파일이 아닌 다른 파일에서도 참조할 수 있게 만들어요. 자세한 내용은 import 섹션을 참고해요.
resume
resume은 함수가 일시 중단된 지점 이후부터 함수 프레임의 실행을 이어가요.
return
return은 값을 반환하면서 함수를 종료해요. 자세한 내용은 Functions 섹션을 봐요.
struct
struct는 구조체를 정의해요. 자세한 내용은 struct 섹션을 참고해요.
suspend
suspend는 제어 흐름을 함수의 호출 지점이나 resumer로 되돌려 보내요. 또 함수 안의 블록 앞에 붙여서, 제어 흐름이 호출 지점으로 돌아가기 전에 함수가 자기 프레임에 접근할 수 있게 할 수도 있어요.
switch
switch 표현식은 공통 타입의 값을 테스트할 때 써요. switch의 case들은 Tagged-union의 필드 값을 잡아낼 수 있어요. 자세한 내용은 switch 섹션을 봐요.
test
test 키워드는 동작이 기대대로인지 확인하기 위한 최상위 코드 블록을 나타낼 때 써요. 자세한 내용은 Zig-Test 섹션을 참고해요.
threadlocal
threadlocal은 변수를 스레드 로컬(thread-local)로 지정할 때 써요. 자세한 내용은 Thread-Local-Variables 섹션을 봐요.
try
try는 에러 유니언 표현식을 평가해요. 그 값이 에러면 같은 에러를 들고 현재 함수에서 반환하고, 그렇지 않으면 언랩된 값으로 결과를 내요. 자세한 내용은 try 섹션을 참고해요.
union
union은 유니언을 정의해요. 자세한 내용은 union 섹션을 봐요.
unreachable
unreachable은 특정 지점에 제어 흐름이 절대 도달하지 않는다고 단언할 때 써요. 빌드 모드에 따라 unreachable은 패닉을 일으킬 수 있어요. Debug와 ReleaseSafe 모드, 또는 zig test를 쓸 때는 패닉을 일으키고, ReleaseFast와 ReleaseSmall 모드에서는 패닉을 일으키지 않아요. 자세한 내용은 unreachable 섹션을 참고해요.
var
var는 수정할 수 있는 변수를 선언해요. 자세한 내용은 Variables 섹션을 봐요.
volatile
volatile은 포인터의 로드나 스토어가 부수 효과(side effect)가 있음을 나타낼 때 써요. 또 인라인 어셈블리 표현식을 수정해서 부수 효과가 있음을 표시하는 데도 써요. 자세한 내용은 volatile, Assembly 섹션을 참고해요.
while
while 표현식은 불리언, 옵셔널, 또는 에러 유니언 표현식을 반복해서 테스트하고, 그 표현식이 각각 false, null, 에러로 평가되면 반복을 멈춰요. 자세한 내용은 while 섹션을 봐요.
더 알아보기
- Keyword Reference — 원문 문서 보기
- Language Reference — Zig 언어 참조 전체