怎么将c移植到d05中

发布时间:2021-10-14 09:45:28 作者:iii
来源:亿速云 阅读:141

本篇内容主要讲解“怎么将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中”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

推荐阅读:
  1. 移植libffi到SylixOS
  2. 将awk脚本移植到Python的方法

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

c++

上一篇:shell中1小于/dev/null 2大于&1的含义是什么

下一篇:手机浏览器Viewport参数有什么用

相关阅读

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

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