min和max巨集:
/** min()/max() macros that also do
* strict type-checking.. see the
* "unnecessary" pointer comparison.
*/#define min(x,y) ()
#define max(x,y) ()
/** ..and if you can't take the strict
* types, you can specify one yourself.
** or not use min/max at all, of course.
*/#define min_t(type,x,y) ()
#define max_t(type,x,y) ()
不是感覺跟我們用的有些不一樣啊:
(void) (&_x == &_y);
(void) (&_x == &_y)這句話本身都執行程式來講完全是一句廢話,它的作用在於,本身我們無法做這樣的操作typeof(_x)==typeof(_y),所以 故意判斷他們2個的位址指標是否相等,顯然是不可能相等,但是如果_x和_y的型別不一樣,其指標型別也會不一樣,2個不一樣的指標型別進行比較操作,會 丟擲乙個編譯警告。也就是說char *p; int *q; 然後p==q;,這個判斷因為乙個是char*乙個是int*,會在編譯時產生乙個warning。巧妙就巧妙在這裡。
由於核心是很多開發著一起開發的,其中還有一些其他的實現,就跟我們平常用的一樣:
#define min(a,b) (((a) < (b)) ? (a) : (b))
試想:
min(++a,++b) ==> ((++a)<(++b))?(++a):(++b)
是不是就有問題了,傳入的引數被加了兩次。
linux核心中關於字元判斷的巨集
linux核心關於字元判斷的巨集 用幾個巨集表示字母 數字 空白 控制符等,再組合為字母或數字等。4 5 note this ctype does not handle eof like the standard c 6 library is required to.7 89 define u0x0...
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...