嵌入式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;}編譯、運行結果:
以上就是本次的分享,如有錯誤,歡迎指出,謝謝。這是第一彈,后續還會繼續分享更多實際開發中實用的編程小技巧及編程經驗。歡迎持續關注。本文只是盤點了一些實用小技巧,并不是說無論什么場景下都要這么用,還需具體問題具體分析。
2、使用宏給結構體初始化
如果頻繁使用一個結構體的話,使用使用宏來給結構體進行賦值是很方便的一種做法。
例子:
#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;}編譯、運行結果:
這種方法在RT-Thread的底層gpio驅動中也有見到:
3、結構體內置函數指針
我們常常構造一些結構體來存儲數據,然后在一些函數中使用這些結構體。下次不妨把數據與操作數據的函數綁在一起,更清晰明了。
例子:
#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;}編譯、運行結果:
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 *常常用于函數地封裝比較多,當然也有用在其它地方,比如在結構體內定義void*類型的私有指針方便擴展結構體。我們平時在封裝自己的函數時,也可以多考慮看看有沒有必要使用void*使得函數地通用性更強一些。
如果本文對你有幫助,不妨轉發分享,謝謝!
來源:嵌入式大雜燴
版權歸原作者所有,如有侵權,請聯系刪除。
▍
關鍵詞:
相關文章
精彩推送
羊脂白玉跟和田玉的區別
羊脂白玉和和田玉是兩種不同的玉石材料,主要區別如下:1 來源:羊脂白
現代牙科(03600)發盈喜,預期上半年純利約2億港元至2.2億港元 同比增加約99.2%至119.1%
智通財經APP訊,現代牙科(03600)發布公告,集團預期2023年上半年的收益
大灣區早報|廣東地區上半年新增減稅降費及退稅緩費668億元;廣州:力爭全市新型儲能產業營業收入到2025年達到600億元以上
日前,坪山區全新修訂的產業發展專項資金系列政策正式出臺,創新采用“
