這篇文章主要介紹“如何將c移植到d06中”,在日常操作中,相信很多人在如何將c移植到d06中問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”如何將c移植到d06中”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
創(chuàng)新互聯(lián)是一家專注于成都做網(wǎng)站、網(wǎng)站制作與策劃設(shè)計(jì),西雙版納網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)10多年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:西雙版納等地區(qū)。西雙版納做網(wǎng)站價(jià)格咨詢:13518219792
方法.但問題是...里面放什么,取決于c編譯器,從最不重要位還是最重要位開始.及字段間是否有空白間隙.與std.bitmanip.bitfields遇著的問題一樣.
我遇見過,然后用單個(gè)不能訪問它的標(biāo)志位字段,如果在多平臺同其他編譯器的庫一起運(yùn)行,沒有簡單解決方法.只有交給用戶了.特定綁定,針對特定編譯器/特定平臺.
函數(shù)指針.一般作為回調(diào).d有自己的語法,所以必須適配.
int function() MyFuncPtr;
//d風(fēng)格指針聲明
格式為中類型->函數(shù)關(guān)鍵字->參數(shù)列表->函數(shù)指針名
直接用MyFuncPtr也可以,但也可定義別名.
alias int function() da_MyFuncPtr;
da_MyFuncPtr MyFuncPtr;
//沒啥意思
int foo(int i)
{
return i;
}
void main()
{
int function(int) fooPtr;//
fooPtr = &foo;
alias int function(int) da_fooPtr;
da_fooPtr fooPtr2 = &foo;
import std.stdio;
writeln(fooPtr(1));
writeln(fooPtr2(2));
}
//這樣轉(zhuǎn)換
// In C, foo.h
typedef int (*MyCallback)(void);
// In D
extern( C ) alias int function() MyCallback;
用別名,這樣,你可像c一樣用.
// In C, foo.h
extern void foo(int (*BarPtr)(int));
// In D.
// 1這樣
extern( C ) void foo(int function(int) BarPtr);
// 2這樣
extern( C ) alias int function(int) BarPtr;
extern( C ) void foo(BarPtr);
2較好,可以復(fù)用.接下來,構(gòu)中內(nèi)聯(lián)聲明函數(shù)指針.
// In C, foo.h
typedef struct
{
int (*BarPtr)(int);
} baz_t;
// In D
struct baz_t
{
extern( C ) int function(int) BarPtr;
}
靜態(tài)綁定中的函數(shù)聲明.d中不必聲明.實(shí)現(xiàn)即是聲明.也與你實(shí)現(xiàn)/聲明位置無關(guān).為鏈接c庫,不必也無權(quán)訪問實(shí)現(xiàn),因而綁定.為了調(diào)用他們,d要知道存在他們.以便鏈接時(shí)找到正確地址.因此,必須聲明.
// In C, foo.h
extern int foo(float f);
extern void bar(void);
// In D
extern( C )
{
int foo(float);
void bar();
}
動(dòng)態(tài)綁定.用函數(shù)指針而不是函數(shù)聲明.簡單聲明是不行的.先要考慮初化函數(shù)指針.
// D中.
int foo() { return 1; }
void* getPtr() { return cast(void*) &foo; }
void main()
{
int function() fooPtr;
fooPtr = getPtr();
}
//編譯得到
fptr.d(10): Error: 不能隱式把(getPtr())的(void*)類型轉(zhuǎn)為`int function()`
到此,關(guān)于“如何將c移植到d06中”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!