在移植yaffs2
到vxworks的過程中發現direct/yaffsfs.h中有這麼一行**:
typedef struct __opaque yaffs_dir;
而該標頭檔案中並沒有任何關於struct __opaque的定義,搜尋了一下系統裡的其他標頭檔案,也沒有找到。google了一下才找到一篇介紹這種用法的文章programming tools - opaque pointers
。opaque直譯的意思是不透明的,c語言中允許通過typedef申明乙個抽象的結構體型別,如上例所示,你無需定義struct __opaque
的具體實現,就能在其他函式的宣告中使用該資料型別的__指標__。注意,只能是指標,如果是void foo(yaffs_dir dir)
,系統就會提示error: dir has incomplete type
。
在庫檔案中,opaque型別的實現如下面的**所示:
typedef struct
yaffsfs_directorysearchcontext;
yaffs_dir *dir = null;
yaffsfs_directorysearchcontext *dsc = null;
...dsc = ymalloc(sizeof(yaffsfs_directorysearchcontext));
dir = (yaffs_dir *)dsc;
**中為抽象型別yaffs_dir的指標分配了乙個具體型別yaffsfs_directorysearchcontext的空間。而這一層對使用者是不可見的,也許這是opaque這個名字的由來,這種做法可以提高庫檔案公升級過程中對外介面的穩定性。 C語言中的型別轉換
計算機進行算術運算時,通常要求運算元具有相同的位數 相同的儲存方式。而c語言支援在表示式中混合使用基本資料型別,因此需要在不同的資料型別之間進行轉換。在c語言中存在兩種型別的轉換,一種是隱式轉換,由編譯器自動處理轉換而無需程式開發人員介入,另一種是強制型別轉換 顯式轉換 需要程式開發人員使用強制轉換...
C語言中的型別轉換!
自動轉換發生在不同資料型別運算時,在編譯的時候自動完成 自動轉換遵循的規則就好比小盒子可以放進大盒子裡面一樣,下圖表示了型別自動轉換的規則。縮寫 ascii 英文全稱 american standard code for information interchange 美國資訊交換標準 是一種用於資...
c語言中的布林型別
在c語言標準 c89 沒有定義布林型別,所以c語言判斷真假時以0為假,非0為真。所以我們通常使用邏輯變數的做法 定義乙個int型別變數,當變數值為0時表示false,值為1時表示true int flag flag 0 flag 1 if flag 但這種做法不直觀,而且沒有明確flag一定是布林值...