映射 c 数组

Mapping c arrays

C 语言的结构如何

typedef struct {
    double a;
    int8_t b[5];
    int32_t c;
} Foo;

在Swift中建模成功了吗? (为明确起见,固定宽度的整数,请随意替换为您头脑中的 charint

将 C 结构导入 Swift 时,静态大小的数组将转换为元组,并且保证内存布局相同。然而,走另一条路并不那么容易,因为它需要我们手动指定潜在的长元组类型。

澄清一下:上述结构可以建模为

struct Foo {
  var a: Double
  var b: (Int8, Int8, Int8, Int8, Int8)
  var c: Int32
}

有没有办法简化这个过程,例如使用预处理器宏或像 c++ std::array 这样的特殊类型?例如,像这样:

struct Foo {
  var a: Double
  var b: C_CHAR_ARRAY(5)
  var c: Int32
}

您的 post 中有几个问题,所以我会尽力回答所有问题。

Swift 中的结构布局不像 C 中那样按源顺序排列,因此您不能在 Swift 中编写相同的结构表示。编译器可以根据需要打包和重新排列它。所以如果你想要 C 布局,你必须使用 C 来定义结构。

至于用一定数量的元素制作元组的简单方法,没有简单的方法可以做到。你可以用C定义它,手写你需要的,或者使用像Sourcery这样的工具来生成它。