重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
本篇内容主要讲解“怎么将c移植到d05中”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么将c移植到d05中”吧!
创新互联公司是一家专业提供高唐企业网站建设,专注与网站建设、成都网站制作、H5场景定制、小程序制作等业务。10年已为高唐众多企业、政府机构等服务。创新互联专业网络公司优惠进行中。
// In C
typedef struct foo_s
{
int x;
struct foo_s *next;
} foo_t;
//一个_s,_t.
// In D
struct foo_t//用后面那个.
{
int x;
foo_t *next;
}
还有c的不透明结构/c++的前向引用,
// In C
typedef struct foo_s foo_t;
// In D
struct foo_t;
翻译结构成员,也是差不多,Typedefs, Aliases,和本地类型,但还有些陷阱.命名函数/类型时,尽量与c一样.但有时c中名字有d的关键字.因而一般在前面加个_.然后在文档中说明.
// In C
typedef struct
{
//d关键字.
int module;
} foo_t;
// In D
struct foo_t
{
int _module;//加上_.
}
还有就是一些c库成员,包装在#define块中.在绑定及用c库时,易出错,转d容易,但用时要小心.
// In C
typedef struct
{
float x;
float y;
#ifdef MYLIB_GO_3D
float z;
#endif
} foo_t;
// In D
struct foo_t
{
float x;
float y;
//用版本限定块,与环境相关的名字
version(Go3D) float z;
}
编译时加上,-version=Go3D开关.如果绑定是库,则应用程序也要加.这就折腾了.c库也要这样编译.如果公开,则还要加上版本文档.真是坑人.
还有个坑,就是位域,一般用std.bitmanip库来解决,但不是特效药,因为c标准,未定义位域的顺序.
typedef struct
{
int x : 2;
int y : 4;
int z: 8;
} foo_t;
不保证字段的顺序,以及是否及在哪填空白.不同编译器,不同平台都不一样.必须得手动匹配.可以考虑用std.bitmanip.bitfields
// D用std.bitmanip.bitfields
struct foo_t
{
mixin(bitfields!(//来转换
int, "x", 2,
int, "y", 4,
int, "z", 8,
int, "", 2)); // padding
}
必须为8的倍数,上面是2个空位.从最不重要位开始.必须要与c编译器匹配.
其余是用
struct foo_t
{
int flags;
int x() @property { ... }
int y() @property { ... }
int z() @property { ... }
}
到此,相信大家对“怎么将c移植到d05中”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!