extern(C) 将 D 连接到 C?
extern(C) in interfacing D to C?
将 D 连接到 C 时,结构和枚举是否需要 extern(C)
?
extern(C) enum XX { A, B }
extern(C) struct Z { int x; }
我需要上面的 extern(C)
才能正确调用
extern extern(C) void f(XX a, Z b)
?
不,它对结构和枚举没有影响。 extern(C)
主要用于函数和函数指针类型,有时也用于与 C 共享的变量(您可能会在其中看到 extern extern(C) __gshared type name;
- 第一个 extern 意味着它是在外部定义的(换句话说,这个定义只是用于使用,而不是存储 space 分配),为 C 定义的第二个含义,__gshared 表示 C 样式的全局变量。)
但在大多数情况下,您应该只在函数和函数指针上使用它。结构定义甚至不必严格匹配 - 例如,名称根本不重要,在某些情况下,内容也不重要(如果它仅通过指针传递和访问,您可以摆脱一个不透明的定义 - 结构没有主体)。
将 D 连接到 C 时,结构和枚举是否需要 extern(C)
?
extern(C) enum XX { A, B }
extern(C) struct Z { int x; }
我需要上面的 extern(C)
才能正确调用
extern extern(C) void f(XX a, Z b)
?
不,它对结构和枚举没有影响。 extern(C)
主要用于函数和函数指针类型,有时也用于与 C 共享的变量(您可能会在其中看到 extern extern(C) __gshared type name;
- 第一个 extern 意味着它是在外部定义的(换句话说,这个定义只是用于使用,而不是存储 space 分配),为 C 定义的第二个含义,__gshared 表示 C 样式的全局变量。)
但在大多数情况下,您应该只在函数和函数指针上使用它。结构定义甚至不必严格匹配 - 例如,名称根本不重要,在某些情况下,内容也不重要(如果它仅通过指针传递和访问,您可以摆脱一个不透明的定义 - 结构没有主体)。