亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
12下一頁
最近訪問板塊 發(fā)新帖
查看: 4437 | 回復(fù): 11
打印 上一主題 下一主題

請教內(nèi)核的一個宏定義 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2011-07-30 14:18 |只看該作者 |倒序瀏覽
#define min(x,y) ({ \
        typeof(x) _x = (x);        \
        typeof(y) _y = (y);        \
        (void) (&_x == &_y);        \
        _x < _y ? _x : _y; })

在看內(nèi)核代碼時,看到一個這樣的宏,實在是不懂(void) (&_x == &_y);這句的意義。請高手指導(dǎo),謝謝!

論壇徽章:
0
2 [報告]
發(fā)表于 2011-07-30 15:56 |只看該作者
看了一下匯編發(fā)現(xiàn)加了這一句后用寄存器比較,對比執(zhí)行效率也變高了

論壇徽章:
0
3 [報告]
發(fā)表于 2011-07-31 12:04 |只看該作者
沒意義,這句,如果x和y類型不同,2個指針賦值會有警告

僅此而已

論壇徽章:
0
4 [報告]
發(fā)表于 2011-07-31 14:08 |只看該作者
沒意義,這句,如果x和y類型不同,2個指針賦值會有警告

僅此而已
tinysniper 發(fā)表于 2011-07-31 12:04



    LZ說的跟你說的不是一回事吧。賦值那兩句顯然是你說的那意思,但是后面比較那句應(yīng)該是為了把兩個都取到寄存器中再進(jìn)行比較,加快效率。

論壇徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16賽季CBA聯(lián)賽之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金雞報曉
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年紀(jì)念徽章
日期:2016-11-09 13:19:1015-16賽季CBA聯(lián)賽之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序設(shè)計版塊每日發(fā)帖之星
日期:2015-12-03 06:20:002015七夕節(jié)徽章
日期:2015-08-21 11:06:17IT運維版塊每日發(fā)帖之星
日期:2015-08-09 06:20:002015亞冠之吉達(dá)阿赫利
日期:2015-07-03 08:39:42
5 [報告]
發(fā)表于 2011-07-31 20:59 |只看該作者
回復(fù) 4# lengyuex


    我在書上也看過確實如三樓的解釋, 哪本書忘記了。。

論壇徽章:
2
2015年辭舊歲徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:57:09
6 [報告]
發(fā)表于 2011-07-31 22:02 |只看該作者
3 樓正解,就是為了判斷x與y是不是同一個類型。

論壇徽章:
0
7 [報告]
發(fā)表于 2011-07-31 23:13 |只看該作者
3 樓正解,就是為了判斷x與y是不是同一個類型。
liujunwei1234 發(fā)表于 2011-07-31 22:02



    應(yīng)該不只有這一種作用吧?你用匯編比較一下看看?

論壇徽章:
0
8 [報告]
發(fā)表于 2011-08-01 09:30 |只看該作者
非常感謝!受教了

論壇徽章:
0
9 [報告]
發(fā)表于 2011-08-02 00:06 |只看該作者
本帖最后由 omycle 于 2011-08-02 00:08 編輯

回復(fù) 3# tinysniper


    沒意義,這句,如果x和y類型不同,2個指針賦值會有警告

僅此而已

人家不是賦值啊~,那個是“==”

這個問題,之前已經(jīng)被人問過了:
http://72891.cn/viewthread.php?tid=1933477

論壇徽章:
0
10 [報告]
發(fā)表于 2011-08-02 08:43 |只看該作者
google一下發(fā)現(xiàn)不是樓上所說,原話粘貼是
關(guān)于其中的:

(void) (&_x == &_y);

很是疑惑,表面看起來,這句話,好像不起作用,算是一句廢話,所以去找了一下別人的解釋,才大概搞懂是啥意思。

首先,我們此處想要實現(xiàn)的目的是,在計算兩個數(shù)的最小值之前,希望去判斷一下兩個值的類型是否一致,而由于C語言本身不支持我們?nèi)プ鲱愃朴谶@樣的操作typeof(_x)==typeof(_y),所以在此,通過故意判斷他們2個的地址指針是否相等,而顯然&_x,即x的地址,是不可能等于&_y的,但是這句話(void) (&_x == &_y);使得,如果_x和_y的類型不一樣,其指針類型也會不一樣,2個不一樣的指針類型進(jìn)行比較操作,則會引起編譯器產(chǎn)生一個編譯警告,提示你這兩個值的類型不同。

比如,如果你編譯下面這段代碼:

int x = 2;
char y = 3;
int m;
m = min(x,y);

編譯的時候,經(jīng)過預(yù)處理后,就會有這樣的判斷操作:

int * == char *;

因此編譯器就會提示你:

warning: comparison of distinct pointer types lacks a cast

所以,這個宏的巧妙之處就在于此。

所以,總結(jié)起來就是:

(void) (&_x == &_y); 用于判斷輸入的兩個值的類型是否是一致的。如果不一致,那么編譯器就會做出如下警告:warning: comparison of distinct pointer types lacks a cast
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP