C 바인딩: type

C 바인딩: type (타입 선언)

lib 안의 type 선언은 C의 typedef 같은 것이지만 더 강력해요. C와 달리 Int32MyInt는 서로 교환할 수 없어서, 감싸는 C 라이브러리가 만든 불투명(opaque) 타입을 다룰 때 유용해요.

출처: Crystal 공식 문서 — C 바인딩: type

본문

lib 안에서 type 선언은 C의 typedef 같은 종류를 선언하지만, 더 강력해요:

lib X
  type MyInt = Int32
end

C와 달리 Int32MyInt는 서로 교환할 수 없어요:

lib X
  type MyInt = Int32

  fun some_fun(value : MyInt)
end

X.some_fun 1 # Error: argument 'value' of 'X#some_fun' must be X::MyInt, not Int32

따라서 type 선언은 감싸고 있는 C 라이브러리가 만든 불투명 타입에 유용해요. 예를 들어 fopen으로 얻을 수 있는 C의 FILE 타입이 그런 경우예요.

typedef 타입에 쓰이는 표기법은 type grammar를 참고하세요.

더 알아보기