本篇內容主要講解“怎么將c移植到d05中”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“怎么將c移植到d05中”吧!
創(chuàng)新互聯(lián)公司是一家專業(yè)提供高唐企業(yè)網(wǎng)站建設,專注與網(wǎng)站建設、成都網(wǎng)站制作、H5場景定制、小程序制作等業(yè)務。10年已為高唐眾多企業(yè)、政府機構等服務。創(chuàng)新互聯(lián)專業(yè)網(wǎng)絡公司優(yōu)惠進行中。
// 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,和本地類型,但還有些陷阱.命名函數(shù)/類型時,盡量與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;
//用版本限定塊,與環(huán)境相關的名字
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的倍數(shù),上面是2個空位.從最不重要位開始.必須要與c編譯器匹配.
其余是用
struct foo_t
{
int flags;
int x() @property { ... }
int y() @property { ... }
int z() @property { ... }
}
到此,相信大家對“怎么將c移植到d05中”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!