Nim 从 C 头文件导入 typedef

Nim import typedef from C header file

我想知道我是否可以导入 C 类型定义,或者我是否需要在 Nim 中重新定义它?

正在查看与此过程交互的名为 jhead 的程序

int ReadJpegFile(const char * FileName, ReadMode_t ReadMode);

第二个参数ReadMode_t是jhead.h中的枚举类型

typedef enum {
    READ_METADATA = 1,
    READ_IMAGE = 2,
    READ_ALL = 3,
    READ_ANY = 5        // Don't abort on non-jpeg files.
}ReadMode_t;

我可以导入这个 ReadMode_t 吗?或者我必须像下面那样重新定义它

type
  ReadMode_t* = enum
    READ_METADATA = 1, READ_IMAGE = 2, READ_ALL = 3, READ_ANY = 5

Nim 编译器需要了解这些 C 常量,因此您必须定义它们才能在 Nim 中使用它们。但是,使用 c2nim 等工具可以简化这种繁琐的复制,甚至在某种程度上实现自动化。事实上,如果你拿下面的 test.h 文件:

typedef enum {
    READ_METADATA = 1,
    READ_IMAGE = 2,
    READ_ALL = 3,
    READ_ANY = 5        // Don't abort on non-jpeg files.
}ReadMode_t;

int ReadJpegFile(const char * FileName, ReadMode_t ReadMode);

和运行c2nim test.h,它会为你生成如下test.nim文件,省去了大部分繁琐的翻译:

type
  ReadMode_t* = enum
    READ_METADATA = 1, READ_IMAGE = 2, READ_ALL = 3, READ_ANY = 5


proc ReadJpegFile*(FileName: cstring; ReadMode: ReadMode_t): cint