千家信息网

怎么将c移植到d05中

发表于:2024-11-30 作者:千家信息网编辑
千家信息网最后更新 2024年11月30日,本篇内容主要讲解"怎么将c移植到d05中",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"怎么将c移植到d05中"吧!// In Ctypedef struc
千家信息网最后更新 2024年11月30日怎么将c移植到d05中

本篇内容主要讲解"怎么将c移植到d05中",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"怎么将c移植到d05中"吧!

// 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中"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

0