嵌入式C中的五大實用技巧分享
intcompar(constvoid*p1,constvoid*p2);
如果compar返回值小于0(< 0),那么p1所指向元素會被排在p2所指向元素的左面;
【資料圖】
如果compar返回值等于0(= 0),那么p1所指向元素與p2所指向元素的順序不確定;
如果compar返回值大于0(> 0),那么p1所指向元素會被排在p2所指向元素的右面。
例子:
#include #include intcompar_int(constvoid*p1,constvoid*p2){return(*((int*)p1)-*((int*)p2));}voidtest_qsort(void){intarr[5]={8,5,10,1,100};printf("排序前:");for(inti=0;i<5;i++){printf("%d",arr[i]);}qsort((int*)arr,5,4,compar_int);printf("\n排序后:");for(inti=0;i<5;i++){printf("%d",arr[i]);}}intmain(void){test_qsort();return0;}
編譯、運行結(jié)果:
以上就是本次的分享,如有錯誤,歡迎指出,謝謝。這是第一彈,后續(xù)還會繼續(xù)分享更多實際開發(fā)中實用的編程小技巧及編程經(jīng)驗。歡迎持續(xù)關(guān)注。本文只是盤點了一些實用小技巧,并不是說無論什么場景下都要這么用,還需具體問題具體分析。
2、使用宏給結(jié)構(gòu)體初始化
如果頻繁使用一個結(jié)構(gòu)體的話,使用使用宏來給結(jié)構(gòu)體進行賦值是很方便的一種做法。
例子:
#include #defineNEW_RECT(length,width){(length),(width)}typedefstruct_Rect{intlength;intwidth;}Rect;intmain(void){Rectrect=NEW_RECT(10,5);printf("rectlength=%d,width=%d\n",rect.length,rect.width);return0;}
編譯、運行結(jié)果:
這種方法在RT-Thread的底層gpio驅(qū)動中也有見到:
3、結(jié)構(gòu)體內(nèi)置函數(shù)指針
我們常常構(gòu)造一些結(jié)構(gòu)體來存儲數(shù)據(jù),然后在一些函數(shù)中使用這些結(jié)構(gòu)體。下次不妨把數(shù)據(jù)與操作數(shù)據(jù)的函數(shù)綁在一起,更清晰明了。
例子:
#include #defineNEW_RECT(length,width){(calc_area),(length),(width)}typedefstruct_Rect{int(*calc_area)(struct_Rect*pThis);intlength;intwidth;}Rect;intcalc_area(struct_Rect*pThis){return(pThis->length*pThis->width);}intmain(void){Rectrect=NEW_RECT(10,5);printf("rectlength=%d,width=%d\n",rect.length,rect.width);printf("rectarea=%d\n",rect.calc_area(&rect));return0;}
編譯、運行結(jié)果:
4、使用do{}while(0)封裝宏
#defineDBG_PRINTF(fmt,args...)\do\{\printf("<>" ,__FILE__,__LINE__,__FUNCTION__);\printf(fmt,##args);\}while(0)
5、void*
之前有介紹過void*
。void*
其實我們平時都有接觸過,比如:
void*malloc(size_tsize);void*memcpy(void*destin,void*source,unsignedn);......
void *
常常用于函數(shù)地封裝比較多,當然也有用在其它地方,比如在結(jié)構(gòu)體內(nèi)定義void*
類型的私有指針方便擴展結(jié)構(gòu)體。我們平時在封裝自己的函數(shù)時,也可以多考慮看看有沒有必要使用void*
使得函數(shù)地通用性更強一些。
如果本文對你有幫助,不妨轉(zhuǎn)發(fā)分享,謝謝!
來源:嵌入式大雜燴
版權(quán)歸原作者所有,如有侵權(quán),請聯(lián)系刪除。
▍
關(guān)鍵詞:
相關(guān)文章
2023未來科學(xué)大獎獲獎名單公布 創(chuàng)設(shè)至今共評選出35位獲獎?wù)?/a>
中新網(wǎng)北京8月16日電 (記者 張素)16日,未來科學(xué)大獎委員公布2023
2023南昌創(chuàng)業(yè)擔(dān)保貸款利息部分免除申請對象+標準
南昌創(chuàng)業(yè)擔(dān)保貸款利息部分免除(一)范圍與對象在南昌市行政區(qū)域內(nèi)注冊營
我的數(shù)學(xué)老師作文500字優(yōu)秀 我的數(shù)學(xué)老師作文500字
1、我的數(shù)學(xué)老師我的數(shù)學(xué)老師是吳老師。2、是一位年輕的優(yōu)秀的教師。3
精彩推送
英國7月通脹率降至6.8%,創(chuàng)15個月最低
英國國家統(tǒng)計局周三發(fā)布的數(shù)據(jù)顯示,英國7月份總體通脹率從6月的7 9%大
設(shè)計量販ktv(aladd設(shè)計量販鋪)
設(shè)計量販ktv,aladd設(shè)計量販鋪這個很多人還不知道,現(xiàn)在讓我們一起來看
國家發(fā)改委:推動長三角生態(tài)綠色一體化示范區(qū)數(shù)據(jù)中心集群、蕪湖數(shù)據(jù)中心集群優(yōu)化算力布局
國家發(fā)改委:推動長三角生態(tài)綠色一體化示范區(qū)數(shù)據(jù)中心集群、蕪湖數(shù)據(jù)中
半年虧損 4 億,曾志偉放下身段學(xué)習(xí)內(nèi)娛,TVB 能被盤活嗎
TVB發(fā)布半年財報,2023上半年收入是15 6億港元,跟2022上半年相比,還
2023未來科學(xué)大獎獲獎名單公布 創(chuàng)設(shè)至今共評選出35位獲獎?wù)?/a>
中新網(wǎng)北京8月16日電 (記者 張素)16日,未來科學(xué)大獎委員公布2023
上海一男子虐貓埋尸時被鄰居發(fā)現(xiàn)!所在公司:即刻開除,永不錄用
昨天(8月15日)上海一男子虐貓后掩埋尸體時被經(jīng)常喂養(yǎng)該流浪貓的鄰居
環(huán)碼生物完成數(shù)千萬美元A輪融資,與輝瑞公司合作探索環(huán)形RNA療法
樂居財經(jīng)彥杰8月16日消息,上海環(huán)碼生物宣布完成數(shù)千萬美元A輪融資,由
羊脂白玉跟和田玉的區(qū)別
羊脂白玉和和田玉是兩種不同的玉石材料,主要區(qū)別如下:1 來源:羊脂白
俄羅斯月球25號成功發(fā)射,有望搶回世界第一寶座,今后幾天很關(guān)鍵
就在前不久,印度發(fā)射月船三號引發(fā)了一系列“漣漪”效應(yīng),從成功發(fā)射、
原亳州師范高等專科學(xué)校黨委副書記、副校長丁凌被開除黨籍
中新網(wǎng)合肥8月16日電日前,經(jīng)安徽省亳州市委批準,亳州市紀委監(jiān)委對原
現(xiàn)代牙科(03600)發(fā)盈喜,預(yù)期上半年純利約2億港元至2.2億港元 同比增加約99.2%至119.1%
智通財經(jīng)APP訊,現(xiàn)代牙科(03600)發(fā)布公告,集團預(yù)期2023年上半年的收益
亞通精工:公司截止到8月10日的股東人數(shù)為17404戶
亞通精工60319008月14日在投資者關(guān)系平臺上答復(fù)了投資者關(guān)心的問題投資
民生健康將上市:產(chǎn)品結(jié)構(gòu)單一,竺福江、竺昱祺父子為實控人
近日,杭州民生健康藥業(yè)股份有限公司(下稱“民生健康”,SZ:301507)
金投集團成功發(fā)行新疆首單科技創(chuàng)新公司債 規(guī)模5億元
8月15日,新疆金融投資(集團)有限責(zé)任公司(以下簡稱“金投集團”)
因違規(guī)放貸,山西陽城農(nóng)商銀行被罰款百萬元,17人被警告,1人被終身禁業(yè)
8月15日,據(jù)國家金融監(jiān)督管理總局網(wǎng)站發(fā)布的行政處罰信息公開表顯示,
廣東上半年新增減稅降費及退稅緩費668億元 中小微企業(yè)受益明顯
新華財經(jīng)廣州8月16日電(記者劉宏宇)國家稅務(wù)總局廣東省稅務(wù)局的數(shù)據(jù)
海關(guān)總署新推23條舉措 進一步促進綜合保稅區(qū)高質(zhì)量發(fā)展
央視網(wǎng)消息:記者今天(8月16日)從中國海關(guān)總署獲悉,日前海關(guān)總署新
2023年P(guān)OE膠概念上市公司有哪些?(8月15日)
2023年P(guān)OE膠概念上市公司有哪些?(8月15日),2023年P(guān)OE膠概念上市公司
碧桂園服務(wù)將于8月29日舉行董事會會議,以考慮及批準中期業(yè)績
每經(jīng)AI快訊,碧桂園服務(wù)公告,將于8月29日舉行董事會會議,以考慮及批
港股異動|海納星空科技(08297)午后跌超7% 一季度凈虧損同比擴大65.49%
智通財經(jīng)APP獲悉,海納星空科技(08297)午后跌超7%,截至發(fā)稿,跌5 71%
大灣區(qū)早報|廣東地區(qū)上半年新增減稅降費及退稅緩費668億元;廣州:力爭全市新型儲能產(chǎn)業(yè)營業(yè)收入到2025年達到600億元以上
日前,坪山區(qū)全新修訂的產(chǎn)業(yè)發(fā)展專項資金系列政策正式出臺,創(chuàng)新采用“
2023南昌創(chuàng)業(yè)擔(dān)保貸款利息部分免除申請對象+標準
南昌創(chuàng)業(yè)擔(dān)保貸款利息部分免除(一)范圍與對象在南昌市行政區(qū)域內(nèi)注冊營
同興達:我司子公司南昌同興達的產(chǎn)品有涉及人工智能領(lǐng)域
同興達00284508月16日在投資者關(guān)系平臺上答復(fù)了投資者關(guān)心的問題投資者
新一輪存款降息已在路上?央行超預(yù)期下調(diào)MLF利率 分析師:可提振有效需求 存款利率將跟隨LPR下行
在對年內(nèi)CPI同比回升幅度進行積極與消極假設(shè)的前提下,年底前MLF利率降