首页 > 解决方案 > extern(C) 将 D 连接到 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)

?

标签: dextern

解决方案


不,它对结构和枚举没有影响。extern(C)主要用于函数和函数指针类型,有时也用于与 C 共享的变量(您可能会看到extern extern(C) __gshared type name;- 第一个 extern 表示它是在外部定义的(换句话说,此定义仅供使用,而不是存储空间分配),为 C 定义的第二个含义,__gshared 表示 C 样式的全局变量。)

但在大多数情况下,您应该只在函数和函数指针上使用它。结构定义甚至不必严格匹配——例如,名称根本不重要,在某些情况下,内容也不重要(如果它只是通过指针传递和访问,你可以逃脱一个不透明的定义 - 没有结构体)。


推荐阅读