最近在檢視linux**時看到了乙個typecheck函式,剛開始不是很明白,具體**如下:
#define typecheck(type,x) \
()
這是乙個巨集,它是檢查type和x的資料型別是否一樣,比如我們這樣使用
int a;
typecheck(double,a);
//巨集展開後是乙個表示式
()//typeof關鍵字是c語言中的乙個擴充套件,用於識別出某個表示式或型別的具體。
typeof(int *) a,b;
等價於:
int *a,*b;
//後面就是取兩個變數的位址,然後比較,因為__dummy是double型別而__dummy2是int型別,取位址後是兩種不同型別的指標,不同型別的指標不能比較,會出現編譯錯誤,這種方式實現了型別的檢查。
1;//這個是表示式最後的值。如果整個表示式沒有錯誤,那麼最後的1就是整個表示式的值。
//總結:整個巨集定義其實是乙個表示式,不是函式,無所謂返回值,這個值是這個表示式的值,復合表示式,取最後乙個表示式的值,作為複雜表示式的值。所以這裡整個表示式的值就是最後乙個表示式的值,也就是1
Linux核心中的list for each
在linux核心原始碼中,經常要對鍊錶進行操作,其中乙個很重要的巨集是list for each entry 意思大體如下 假設只有兩個結點,則第乙個member代表head,list for each entry的作用就是迴圈遍歷每乙個pos中的member子項。巨集list for each e...
Linux核心中的Namespace
linux核心中的namespace提供了乙個輕量級的基於系統呼叫層面的虛擬化解決方案。相比傳統的使用 vmware,qemu,xen,kvm,hurd的虛擬 圖1所示 基於namespace的輕量級虛擬具有易使用,易管理,無需硬體虛擬化支援,低 成本等優點。圖 1.namespace又稱conta...
linux核心中的 config
經過make menuconfig 生成 config 決定哪些驅動編譯到核心,哪些驅動編譯為模組 那為什麼呢?舉個例子分析一下 eg 在.config 中有 config dm9000 y grep config dm9000 r 1.c檔案中 arch arm mach s5pv210 mach...