Linux系統核心中判斷大小的巨集

2021-05-22 02:42:16 字數 905 閱讀 2317

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...