如何将c移植到d06中
这篇文章主要介绍“如何将c移植到d06中”,在日常操作中,相信很多人在如何将c移植到d06中问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何将c移植到d06中”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
创新互联是一家专注于成都做网站、网站制作与策划设计,西双版纳网站建设哪家好?创新互联做网站,专注于网站建设10多年,网设计领域的专业建站公司;建站业务涵盖:西双版纳等地区。西双版纳做网站价格咨询:13518219792
方法.但问题是...里面放什么,取决于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中”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!
当前名称:如何将c移植到d06中
标题链接:http://myzitong.com/article/gjhhjs.html