Linux核心中的Min和Max函式

2022-08-20 02:18:14 字數 945 閱讀 9956

今天看**時看到乙個有趣的東東,就是linux核心也有min函式,但它的實現很是奇怪,先貼出來:

/** min()/max() macros that also do

* strict type-checking.. see the

* "unnecessary" pointer comparison.

*/#define min(x,y) ()

#define max(x,y) ()

其他都很平常,但中間(void) (&_x == &_y);比較奇怪,這句幹嘛用的的呢?

查了下網發現:

(void) (&_x == &_y)這句話本身都執行程式來講完全是 div:eq(0) > div:eq(3) > table:eq(2) > tbody:eq(0) > tr:eq(0) > td:eq(0) > div:eq(0) > #content:eq(0) > br:eq(18)" anchortype="previous" jquery1251853974125="6">一句

廢話,它的作用在於,本身我們無法做這樣的操作typeof(_x)==typeof(_y),所以故意判斷他們2個的位址指標是否相等,顯然是不可能相等,但是如果_x和_y的型別不一樣,其指標型別也會不一樣,2個不一樣的指標型別進行比較操作,會丟擲乙個編譯警告。也就是說char *p; int *q; 然後p==q;,這個判斷因為乙個是char*乙個是int*,會在編譯時產生乙個warning。巧妙就巧妙在這裡。

另外為什麼要在定義兩個區域性變數_x,_y,作用體現如下:

如果定義成下面這樣:

#define min(a,b) (((a) < (b)) ? (a) : (b))

試想:

min(++a,++b) ==> ((++a)<(++b))?(++a) : (++b)

是不是就有問題了,傳入的引數被加了兩次。

定義成上面這樣就不會出問題了,呵呵

linux核心中的BUG 和 BUG ON

文章出處 在核心 中,經常會看到一些除錯函式,如bug,bug on等。使用前,先在核心配置中把kernel debug選上 make menuconfig kernel hacking kernel debug 作用 一些核心呼叫可以用來方便標記bug,提供斷言並輸出資訊。最常用的兩個是bug 和...

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