alias

alias (타입 별칭)

C언어 바인딩을 다루다 보면 struct, union, enum처럼 타입 이름이 길어지기 마련이에요. lib 안에서 alias를 쓰면 C의 typedef와 같은 역할을 하는 타입 별칭을 선언할 수 있어요.

출처: Crystal 공식 문서 - alias

본문

lib 안에서 alias 선언은 C의 typedef를 선언한 것과 같아요.

lib X
  alias MyInt = Int32
end

이제 Int32MyInt는 서로 바꿔 쓸 수 있어요.

lib X
  alias MyInt = Int32

  fun some_fun(value : MyInt)
end

X.some_fun 1 # OK

alias는 길어지는 타입을 반복해서 쓰지 않게 해 주는 데 가장 유용하지만, 컴파일 타임 플래그에 따라 타입을 다르게 선언하는 데도 쓸 수 있어요.

lib C
  {% if flag?(:x86_64) %}
    alias SizeT = Int64
  {% else %}
    alias SizeT = Int32
  {% end %}

  fun memcmp(p1 : Void*, p2 : Void*, size : C::SizeT) : Int32
end

위 예시처럼 플랫폼에 따라 타입이 달라져야 하는 C 바인딩을 작성할 때 alias가 아주 큰 역할을 해요. alias 타입에 쓰는 표기법에 대한 자세한 내용은 타입 문법을 참고하세요.

더 알아보기

  • lib 안에서 C 타입을 다루는 방법은 C 바인딩 문서에서 확인할 수 있어요.
  • 컴파일 타임 조건 분기는 Macros 문서에서 다뤄요.