您好,登錄后才能下訂單哦!
這篇文章主要介紹“如何將c移植到d06中”,在日常操作中,相信很多人在如何將c移植到d06中問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”如何將c移植到d06中”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!
方法.但問題是...里面放什么,取決于c編譯器,從最不重要位還是最重要位開始.及字段間是否有空白間隙.與std.bitmanip.bitfields遇著的問題一樣.
我遇見過,然后用單個(gè)不能訪問它的標(biāo)志位字段,如果在多平臺(tái)同其他編譯器的庫一起運(yùn)行,沒有簡(jiǎn)單解決方法.只有交給用戶了.特定綁定,針對(duì)特定編譯器/特定平臺(tái).
函數(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ù)聲明.簡(jiǎn)單聲明是不行的.先要考慮初化函數(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)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。