亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

用C語言的泛型實現交換兩個變量值

2020-01-26 14:26:38
字體:
來源:轉載
供稿:網友

第一種,最常用的是創建一個中間變量來循環交換它們的值:

T a = ...;T b = ...;.T tmp = a; a = b; a = tmp;

我們稱這種策略p99_swap1。在這里,編譯器必須嚴格實現三個任務的順序,否則,由此程序產生的結果將是不正確的。

第二種,叫它p99_swap2,試圖做類似的事情,但放松一些順序約束:

T a = ...;T b = ...;.T tmpa = a; T tmpb = b;a = tmpb; b = tmpa;

用更多的資源(??臻g或寄存器)可以產生更有效的代碼。兩個對象可以平行地加載和保存。但收益可能只在小對象上可以看到。所以將兩者結合起來是一個可能的嘗試

#define P99_SWAP(A, B) (sizeof(A) > sizeof(uintmax_t) ? P99_SWAP1(A, B) : P99_SWAP2(A, B))

但是如何實現兩個 “子宏” P99_SWAP1 P99_SWAP2(A, B) ?如果我們想使用C的宏或者函數來實現的難度在于僅僅是傳遞參數A和B而不知道其類型,所以讓我們先寫函數和宏,忘記類型問題:

inlinevoid p00_swap2(void* a, void* b, void* tmpa, void* tmpb, size_t len) {  memcpy(tmpa, a, len);  memcpy(tmpb, b, len);  memcpy(b, tmpa, len);  memcpy(a, tmpb, len);}#define P00X_SWAP2(A, B) p00_swap2(  &(A),                   /  &(B),                   /  (char[sizeof(A)]){ [0] = 0 },       /  (char[sizeof(A)]){ [0] = 0 }, sizeof(A))

這個古怪的表達式: (char[sizeof(A)]){ [0] = 0 } 被稱為復合文字(C99新特性),為復制操作提供臨時對象。

這有幾個缺點。首先,我們甚至沒有檢查是否A和B與對象具有相同的大小,但我們很愉快地復制到他們。因此,首先,我們必須斷言它們至少具有相同的大小,避免引起不確定的行為。這樣就可以為兩個復合文字實現一些表達上的魔法:

(char[sizeof(A)]){ [(intmax_t)sizeof(A) - sizeof(B)] = 0 }

其中:intmax_t類型指定一個最大尺寸有符號整數

這里發生了什么?右邊的[]里面,一個指定的初始值,被用來初始化字符數組中的一個元素?,F在我們將比較兩者的大?。喝绻麅烧呦嗟?,則表示位置0處的元素,如果sizeof(A) < sizeof(B) ,類型轉換 intmax_t 在編譯的期間將產生一個負數。

如果現在我們將上面的策略應用于第二個復合文字,我們得到一個宏,在它調用兩個相同大小的對象的時候成功編譯,并在大小不同的時候在編譯期間產生錯誤:

#define P00_SWAP2(A, B)p00_swap2(                           /   &(A),                            /   &(B),                            /   (char[sizeof(A)]){ [(intmax_t)sizeof(A) - sizeof(B)] = 0 }, /   (char[sizeof(B)]){ [(intmax_t)sizeof(B) - sizeof(A)] = 0 }, /   sizeof(A))

這現在已經是更安全,但也許還不夠安全,因為這兩個對象可能有相同的大小,但仍然不是同一類型。我們可以做一個額外的檢查來確定這兩種類型是否是兼容的。這可以通過下面這樣的可能第一眼看起來有點hack

(1 ? &(A) : ((A = B), NULL))#define P99_SWAP(A, B) (sizeof(A) > sizeof(uintmax_t) ? P99_SWAP1(A, B) : P99_SWAP2(A, B))

這里的條件總是真,所以它總是等于&(A)。第二個“假”部分在運行時從未執行,但只用來檢查它是否是正確的C代碼。如果A和B不會兼容,則表示不是正確的C代碼。

以上就是這篇文章的全部內容,希望本文的內容對大家的學習和工作能帶來幫助,如果有疑問可以留言交流。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩精品在线私人| www.久久久久久.com| 日韩av电影院| 国产一区二区成人| 亚洲色图日韩av| 精品一区二区三区四区在线| 北条麻妃一区二区三区中文字幕| 午夜精品福利在线观看| 久热爱精品视频线路一| 日韩av色综合| 日韩成人网免费视频| 国产日韩欧美中文在线播放| 精品久久久久久久久久久久| 91久久国产精品| 中日韩美女免费视频网址在线观看| 欧美精品videos| 亚洲午夜av久久乱码| 中文字幕亚洲专区| 亚洲全黄一级网站| 国产精品入口免费视频一| 91成人天堂久久成人| 98精品国产高清在线xxxx天堂| 粉嫩老牛aⅴ一区二区三区| 亚洲成**性毛茸茸| 日韩欧美国产免费播放| 亚洲天堂精品在线| 日韩精品免费在线播放| 亚洲无av在线中文字幕| 国产精品日韩av| 国产成人精品日本亚洲| www.日本久久久久com.| 国产精品普通话| 51视频国产精品一区二区| 国产精品免费观看在线| 日韩69视频在线观看| 欧美激情奇米色| 精品国产区一区二区三区在线观看| 精品国产视频在线| 日韩综合视频在线观看| 在线看福利67194| 91国产一区在线| 亚洲精品自拍偷拍| 国产精品羞羞答答| 国产精品第3页| 欧美孕妇毛茸茸xxxx| 国产精品69精品一区二区三区| 亚洲精品福利在线观看| 亚洲第一天堂无码专区| 日韩成人av在线播放| 91精品在线看| 日韩在线观看av| 成人久久一区二区| 成人国产精品一区| 亚洲最大的成人网| www.日韩系列| 欧美乱大交xxxxx| 久久精品国产亚洲| 精品高清一区二区三区| 伊人久久综合97精品| 日韩在线观看免费全集电视剧网站| 国产精品18久久久久久麻辣| 色偷偷888欧美精品久久久| 欧美激情久久久久| 欧美激情精品久久久久久大尺度| 亚洲第一区中文99精品| 亚洲成人动漫在线播放| 日韩欧美在线免费| 国产精品最新在线观看| 国产午夜精品视频免费不卡69堂| 日韩在线视频国产| 日韩在线视频线视频免费网站| 日韩精品极品毛片系列视频| 一本色道久久88精品综合| 国产精品美女www爽爽爽视频| 欧美精品18videosex性欧美| 日韩欧美在线视频日韩欧美在线视频| 日本韩国欧美精品大片卡二| 亚洲精品福利免费在线观看| www欧美日韩| 欧美中文字幕在线观看| 热久久美女精品天天吊色| 欧美高清视频在线| 国产综合色香蕉精品| 青青草原成人在线视频| 日韩欧美精品在线观看| 91免费观看网站| 国产精品福利在线观看| 久久久久久久久久久人体| 日韩美女在线观看| 中文字幕亚洲激情| 韩国19禁主播vip福利视频| 久久91亚洲精品中文字幕| 精品国偷自产在线视频| 日韩电视剧在线观看免费网站| 国产日韩欧美中文在线播放| 不卡av电影在线观看| 日韩欧美亚洲国产一区| 日韩精品视频中文在线观看| 欧美激情视频在线免费观看 欧美视频免费一| 欧美精品在线视频观看| 日本在线观看天堂男亚洲| 亚洲精品美女久久| 在线视频欧美性高潮| 91社影院在线观看| 欧美电影在线观看网站| 精品久久久久久久久久ntr影视| 色偷偷偷亚洲综合网另类| 欧美在线视频导航| 中文字幕一精品亚洲无线一区| 亚洲韩国日本中文字幕| 久久精品99无色码中文字幕| 亚洲成成品网站| 97激碰免费视频| 日韩精品在线观看网站| 在线播放精品一区二区三区| 日韩电视剧免费观看网站| 青青a在线精品免费观看| 欧美性猛交xxxx乱大交蜜桃| 最新国产精品拍自在线播放| 亚洲成av人影院在线观看| 激情久久av一区av二区av三区| 欧美成人免费网| 九九精品在线视频| 亚洲xxxx18| 精品偷拍一区二区三区在线看| 久久国产精品网站| 午夜精品免费视频| 精品国产成人在线| 久久精品中文字幕| 2018中文字幕一区二区三区| 日韩精品视频在线观看网址| 亚洲aa在线观看| 久久久久久久久久久久久久久久久久av| 欧美天堂在线观看| 久久影视三级福利片| 亚洲一级黄色av| 97在线观看视频| 亚洲黄在线观看| 亚洲国产精品成人精品| 国产精品最新在线观看| 成人激情视频在线| 日韩电影中文字幕在线观看| 4438全国亚洲精品在线观看视频| 韩剧1988免费观看全集| 国产精品99久久久久久久久久久久| 成人网址在线观看| 国模gogo一区二区大胆私拍| 亚洲欧美综合v| 亚洲97在线观看| yellow中文字幕久久| 日韩欧美在线免费观看| 日韩成人激情视频| 69av成年福利视频| 欧美裸体xxxx极品少妇软件| 日本三级韩国三级久久| 色www亚洲国产张柏芝| 国产成人精品电影久久久| 欧美日韩国产中文精品字幕自在自线| 国产99视频精品免视看7| 日韩欧美在线观看| 亚洲欧美精品一区| 午夜美女久久久久爽久久| 日本成人精品在线| 欧美激情综合色|