#define min(x, y)({
typeof(x) _min1 = (x);
typeof(y) _min2 = (y);
(void) (&_min1 == &min2);
_min1 < _min2 ? _min1 : _min2;
一直不理解第四行(void) (&_min1 == &min2);
查了下資料發現這樣做的目的是為了避免不同型別的變數進行比較
如果x為int型別y為long型別,編譯的時候會報錯comparison of distinct pointer types lacks a cast
但是如果去掉了第四行 編譯就會通過。
寫linux核心**的前輩真的是牛,每一行**都一定有她的作用,絕對不是隨意寫的!
此外為linux原始碼中的函式大多函式雙下劃線開頭 因為ansi c函式和gnu c中的保留關鍵字會有衝突
這樣做就可以避免。
變數的引用型別和非引用型別的區別
author liyuechao date 2014.8.8 algo1 3.cpp 變數的引用型別和非引用型別的區別 includevoid fa int a 在函式中改變a,將不會帶回主調函式 主調函式中的a仍是原值 void fb int a 由於a為引用型別,在函式中改變a,其值將帶回主調函...
變數的引用型別和非引用型別的區別
author liyuechao date 2014.8.8 algo1 3.cpp 變數的引用型別和非引用型別的區別 includevoid fa int a 在函式中改變a,將不會帶回主調函式 主調函式中的a仍是原值 void fb int a 由於a為引用型別,在函式中改變a,其值將帶回主調函...
值型別變數和引用型別變數的區別
主要區別在於 系統在記憶體空間中為兩者分配儲存空間的方式不同。記憶體空間分為棧空間和堆空間。值型別資料的儲存空間在棧空間中分配,引用型別資料則在堆空間分配。由系統管理棧空間的所有操作,包括進棧和出棧。當乙個資料出棧後,其所分配到的儲存空間由系統自動 堆空間由clr負責管理。c 中的值型別變數和c c...