GCC通過變數的引用識別型別

2021-08-17 10:36:08 字數 470 閱讀 1098

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