정수를 오류로 변환하기
정수를 오류로 변환하기 (@errorFromInt / @intToError)
본문
오류 값을 직접 다루다 보면, 오류가 실제로는 어떤 정수로 표현되는지 궁금해질 수 있어요. 그 정수 값을 다시 오류 타입으로 바꾸고 싶을 때 쓰는 내장 함수가 @errorFromInt예요. (예전 문서에서는 @intToError라는 이름으로 소개되던 함수랍니다.)
@errorFromInt(value: @Int(.unsigned, @bitSizeOf(anyerror))) anyerror
이 함수는 오류의 정수 표현을 받아서 The Global Error Set 타입으로 변환해 줘요.
그런데 사실 이 함수는 웬만하면 쓰지 않는 편이 좋아요. 오류의 정수 표현은 소스 코드가 조금만 바뀌어도 안정적으로 유지되지 않거든요. 즉 오류에 어떤 숫자가 매겨질지는 Zig의 구현 세부 사항에 가까워서, 코드를 고치면 그 숫자가 바뀔 수 있다는 뜻이에요. 그래서 이 변환에 의존하는 로직은 깨지기 쉬워요.
게다가 이 변환은 안전 검사가 붙어 있는데, 어떤 오류에도 해당하지 않는 정수 값을 건네면 Illegal Behavior가 발생해요. 엉뚱한 숫자를 진짜 오류로 오인하는 사고를 미리 막아주는 것이죠.
더 알아보기
- @intFromError: 이 함수의 반대 방향, 즉 오류를 다시 정수 표현으로 바꾸는 변환이에요.