d - 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)
?
解决方案
不,它对结构和枚举没有影响。extern(C)
主要用于函数和函数指针类型,有时也用于与 C 共享的变量(您可能会看到extern extern(C) __gshared type name;
- 第一个 extern 表示它是在外部定义的(换句话说,此定义仅供使用,而不是存储空间分配),为 C 定义的第二个含义,__gshared 表示 C 样式的全局变量。)
但在大多数情况下,您应该只在函数和函数指针上使用它。结构定义甚至不必严格匹配——例如,名称根本不重要,在某些情况下,内容也不重要(如果它只是通过指针传递和访问,你可以逃脱一个不透明的定义 - 没有结构体)。
推荐阅读
- python - Python:使用 cons、car 和 cdr 进行函数式编程
- spring-integration-dsl - 具有事务控制的 Spring 集成 DSL JMS 和 CrudRepository
- html - 为什么段落在 FLEXBOX 中不起作用?
- r - 是否需要规范化数据以在食谱中生成自然样条曲线
- sql - 在子查询中使用 min() 和 avg()
- framer-motion - 如何修复 Frame-motion 中的退出动画?
- flutter - 是否可以传递带参数的函数,然后在 Dart 中调用它?
- sql - 如何使用 postgreSQL 管理嵌套循环和存储返回
- laravel - Laravel sanctum API 令牌认证失败
- reactjs - React - 子元素不重新渲染