如何将c移植到d06中

发布时间:2021-10-13 15:33:21 作者:iii
来源:亿速云 阅读:122

这篇文章主要介绍“如何将c移植到d06中”,在日常操作中,相信很多人在如何将c移植到d06中问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何将c移植到d06中”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

方法.但问题是...里面放什么,取决于c编译器,从最不重要位还是最重要位开始.及字段间是否有空白间隙.与std.bitmanip.bitfields遇着的问题一样.

我遇见过,然后用单个不能访问它的标志位字段,如果在多平台同其他编译器的库一起运行,没有简单解决方法.只有交给用户了.特定绑定,针对特定编译器/特定平台.

函数指针.一般作为回调.d有自己的语法,所以必须适配.

int function() MyFuncPtr;
//d风格指针声明

格式为中类型->函数关键字->参数列表->函数指针名

直接用MyFuncPtr也可以,但也可定义别名.

alias int function() da_MyFuncPtr;
da_MyFuncPtr MyFuncPtr;
//没啥意思
int foo(int i)
{
return i;
}

void main()
{
int function(int) fooPtr;//
fooPtr = &foo;
alias int function(int) da_fooPtr;
da_fooPtr fooPtr2 = &foo;
import std.stdio;
writeln(fooPtr(1));
writeln(fooPtr2(2));
}
//这样转换
// In C, foo.h
typedef int (*MyCallback)(void);
// In D
extern( C ) alias int function() MyCallback;

用别名,这样,你可像c一样用.

// In C, foo.h
extern void foo(int (*BarPtr)(int));

// In D.
// 1这样
extern( C ) void foo(int function(int) BarPtr);

// 2这样
extern( C ) alias int function(int) BarPtr;
extern( C ) void foo(BarPtr);

2较好,可以复用.接下来,构中内联声明函数指针.

// In C, foo.h
typedef struct
{
int (*BarPtr)(int);
} baz_t;

// In D
struct baz_t
{
extern( C ) int function(int) BarPtr;  
}

静态绑定中的函数声明.d中不必声明.实现即是声明.也与你实现/声明位置无关.为链接c库,不必也无权访问实现,因而绑定.为了调用他们,d要知道存在他们.以便链接时找到正确地址.因此,必须声明.

// In C, foo.h
extern int foo(float f);
extern void bar(void);
// In D
extern( C )
{
   int foo(float);
   void bar();
}

动态绑定.用函数指针而不是函数声明.简单声明是不行的.先要考虑初化函数指针.

// D中.
int foo() { return 1; }
void* getPtr() { return cast(void*) &foo; }
void main()
{
   int function() fooPtr;
   fooPtr = getPtr();
}
//编译得到
fptr.d(10): Error: 不能隐式把(getPtr())的(void*)类型转为`int function()`

到此,关于“如何将c移植到d06中”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

推荐阅读:
  1. 移植libffi到SylixOS
  2. lua 移植到 android 记录

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

上一篇:java Concurrent HashMap锁分段技术及原理是什么

下一篇:HTML5如何实现交互

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》