溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何將c移植到d06中

發布時間:2021-10-13 15:33:21 來源:億速云 閱讀:176 作者:iii 欄目:編程語言

這篇文章主要介紹“如何將c移植到d06中”,在日常操作中,相信很多人在如何將c移植到d06中問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”如何將c移植到d06中”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

方法.但問題是...里面放什么,取決于c編譯器,從最不重要位還是最重要位開始.及字段間是否有空白間隙.與std.bitmanip.bitfields遇著的問題一樣.

我遇見過,然后用單個不能訪問它的標志位字段,如果在多平臺同其他編譯器的庫一起運行,沒有簡單解決方法.只有交給用戶了.特定綁定,針對特定編譯器/特定平臺.

函數指針.一般作為回調.d有自己的語法,所以必須適配.

int function() MyFuncPtr;
//d風格指針聲明

格式為中類型->函數關鍵字->參數列表->函數指針名

直接用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));
}
//這樣轉換
// 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較好,可以復用.接下來,構中內聯聲明函數指針.

// In C, foo.h
typedef struct
{
int (*BarPtr)(int);
} baz_t;

// In D
struct baz_t
{
extern( C ) int function(int) BarPtr;  
}

靜態綁定中的函數聲明.d中不必聲明.實現即是聲明.也與你實現/聲明位置無關.為鏈接c庫,不必也無權訪問實現,因而綁定.為了調用他們,d要知道存在他們.以便鏈接時找到正確地址.因此,必須聲明.

// In C, foo.h
extern int foo(float f);
extern void bar(void);
// In D
extern( C )
{
   int foo(float);
   void bar();
}

動態綁定.用函數指針而不是函數聲明.簡單聲明是不行的.先要考慮初化函數指針.

// D中.
int foo() { return 1; }
void* getPtr() { return cast(void*) &foo; }
void main()
{
   int function() fooPtr;
   fooPtr = getPtr();
}
//編譯得到
fptr.d(10): Error: 不能隱式把(getPtr())的(void*)類型轉為`int function()`

到此,關于“如何將c移植到d06中”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女