温馨提示×

温馨提示×

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

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

怎么将c移植到d05中

发布时间:2021-10-14 09:45:28 阅读:146 作者:iii 栏目:编程语言
开发者测试专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

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

// In Ctypedef struct foo_s{int x;struct foo_s *next;} foo_t;//一个_s,_t.// In Dstruct foo_t//用后面那个.{int x;	foo_t *next;}

还有c的不透明结构/c++的前向引用,

// In Ctypedef struct foo_s foo_t;// In Dstruct foo_t;

翻译结构成员,也是差不多,Typedefs, Aliases,和本地类型,但还有些陷阱.命名函数/类型时,尽量与c一样.但有时c中名字有d的关键字.因而一般在前面加个_.然后在文档中说明.

// In Ctypedef struct{//d关键字.int module;} foo_t;// In Dstruct foo_t{int _module;//加上_.}

还有就是一些c库成员,包装在#define块中.在绑定及用c库时,易出错,转d容易,但用时要小心.

// In Ctypedef struct{float x;float y;#ifdef MYLIB_GO_3Dfloat z;#endif} foo_t;// In Dstruct 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.bitfieldsstruct 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中”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

向AI问一下细节

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

原文链接:https://my.oschina.net/u/1017743/blog/5019568

c++
AI

开发者交流群×