您好,登录后才能下订单哦!
本篇内容主要讲解“怎么将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中”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。