大小指示

Nim 会自动确定枚举的大小。但是,当包装 C 枚举类型时,它必须具有特定的大小。 size pragma 允许指定枚举类型的大小。

  1. type
  2. EventType* {.size: sizeof(uint32).} = enum
  3. QuitEvent,
  4. AppTerminating,
  5. AppLowMemory
  6. doAssert sizeof(EventType) == sizeof(uint32)

size pragma 还可以指定 importc 不完整对象类型的大小,这样即使在没有声明字段的情况下,也可以在编译时获取其大小。

  1. type
  2. AtomicFlag* {.importc: "atomic_flag", header: "<stdatomic.h>", size: 1.} = object
  3. static:
  4. # 如果 AtomicFlag 没有使用 size 指示,则此代码将导致编译时错误。
  5. echo sizeof(AtomicFlag)

size pragma 只接受 1、2、4 或 8 的值。