C 바인딩 변수

C 바인딩 변수 (C Bindings Variables)

C 라이브러리가 노출하는 변수를 Crystal에서도 그대로 다룰 수 있어요. C 라이브러리가 제공하는 변수는 lib 선언 안에서, 전역 변수처럼 생긴 선언으로 정의합니다.

lib C
  $errno : Int32
  $buffer : UInt8[256]
end

그러면 값을 읽고 쓸 수 있어요.

C.errno # => some value
C.errno = 0
C.errno # => 0

C.buffer # => StaticArray(UInt8, 256)
C.buffer = StaticArray(UInt8, 256).new(0_u8)

변수는 어노테이션으로 스레드 로컬(thread local)로 표시할 수도 있어요.

lib C
  @[ThreadLocal]
  $errno : Int32
end

외부 변수 타입에 쓰이는 표기법은 타입 문법을 참고하세요.

출처: Crystal 공식 문서 - C bindings Variables

더 알아보기 (Learn more)