c語(yǔ)言常用宏定義技巧

c語(yǔ)言常用宏定義技巧

ID:16622183

大小:49.92 KB

頁(yè)數(shù):57頁(yè)

時(shí)間:2018-08-23

c語(yǔ)言常用宏定義技巧_第1頁(yè)
c語(yǔ)言常用宏定義技巧_第2頁(yè)
c語(yǔ)言常用宏定義技巧_第3頁(yè)
c語(yǔ)言常用宏定義技巧_第4頁(yè)
c語(yǔ)言常用宏定義技巧_第5頁(yè)
資源描述:

《c語(yǔ)言常用宏定義技巧》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。

1、C語(yǔ)言常用宏定義技巧C語(yǔ)言常用宏定義技巧2推薦C語(yǔ)言常用宏定義技巧用C語(yǔ)言編程,宏定義是個(gè)很重要的編程技巧。用好了宏定義,它可以增強(qiáng)程序的可讀性、可移植性、方便性、靈活性等等。1.防止一個(gè)頭文件被重復(fù)包含:#ifndefCOMDEF_H#defineCOMDEF_H//頭文件內(nèi)容#endif當(dāng)你所建的工程有多個(gè)源文件組成時(shí),很可能會(huì)在多個(gè)文件里頭包含了同一個(gè)頭文件,如果借用上面的宏定義就能夠避免同一個(gè)頭文件被重復(fù)包含時(shí)進(jìn)行多次編譯。因?yàn)楫?dāng)它編譯第一個(gè)頭文件時(shí)總是沒有定義#defineCOMDEF_H,那么它將編譯一遍頭文件中所有的內(nèi)容,包括定義#defineCO

2、MDEF_H。這樣編譯再往下進(jìn)行時(shí)如果遇到同樣要編譯的頭文件,那么由于語(yǔ)句#ifndefCOMDEF_H的存在它將不再重復(fù)的編譯這個(gè)頭文件。2.通過宏定義使得同一數(shù)據(jù)類型的字節(jié)數(shù)不因不同的平臺(tái)或不同的編譯器而改變:typedefunsignedcharboolean;/*Booleanvaluetype*/typedefunsignedlongintuint32;/*Unsigned32bitvalue*/typedefunsignedshortuint16;/*Unsigned16bitvalue*/typedefunsignedcharuint8;/*Uns

3、igned8bitvalue*/typedefsignedlongintint32;/*Signed32bitvalue*/typedefsignedshortint16;/*Signed16bitvalue*/typedefsignedcharint8;/*Signed8bitvalue*/3.得到指定地址的一個(gè)字節(jié)或字:#defineMEM_B(x)(*((uint8*)(x)))#defineMEM_W(x)(*((uint16*)(x)))注:類似于這種有多個(gè)字符串組成的宏定義一定要注意加上“()”,因?yàn)槲覀冎篮甓x只是一種簡(jiǎn)單的字符替換功能。4.求最

4、大值和最小值:#defineMAX(x,y)(((x)>(y))?(x):(y))#defineMAX(x,y)(((x)<(y))?(x):(y))5.得到一個(gè)結(jié)構(gòu)體中field所占用的字節(jié)數(shù):#defineFSIZ(type,field)sizeof(((type*)0)->field)6.按照LSB格式把兩個(gè)字節(jié)轉(zhuǎn)化為一個(gè)Word:#defineFLIPW(ray)((((word)(ray)[0])*256)+(ray)[1])或可以是#defineFLIPW(data1,data2)((((word)(data1))*256)+(data2))7.按照

5、LSB格式把一個(gè)Word轉(zhuǎn)化為兩個(gè)字節(jié):#defineFLOPW(ray,val)do{(ray)[0]=((val)/256);(ray)[1]=((val)&0xFF);}while(0)或可以是#defineFLOPW(data1,data2,val)do{data1=((val)/256);data2=((val)&0xFF);}while(0)注:這里的do{}while(0)是為了防止多語(yǔ)句的宏定義在使用中出錯(cuò)。比如:if(…)FLOPW(ray,val)else上面的程序代碼中要是宏定義FLOPW(ray,val)中沒有do{}while(0),這

6、時(shí)我們應(yīng)該將語(yǔ)句改為:if(…){FLOPW(ray,val)}else{}8.得到一個(gè)變量的地址:#defineB_PTR(var)((byte*)(void*)&(var))#defineW_PTR(var)((word*)(void*)&(var))注:宏定義語(yǔ)句中void*申明了該地址可以是任何類型變量的地址,byte*申明為單字節(jié)變量的地址,word*申明為雙字節(jié)變量的地址。9.得到一個(gè)高位和低位字節(jié):#defineWORD_LO(xxx)((byte)((word)(xxx)&0xFF))#defineWORD_HI(xxx)((byte)((wor

7、d)(xxx)>>8))10.返回一個(gè)比X大的最接近的8的倍數(shù):#defineRND8(x)((((x)+7)/8)*8)11.將一個(gè)字母轉(zhuǎn)換為大寫:#defineUPCASE(c)(((c)>=‘a(chǎn)’&&(c)<=‘z’)?((c)–0x20):(c))相對(duì)應(yīng)的還有將一個(gè)字母轉(zhuǎn)換為小寫:#defineUPCASE(c)(((c)>=‘A’&&(c)<=‘Z’)?((c)+0x20):(c))注:如果你記不住大寫和小寫之間的ASCII差值,可以將0x20換成(’a’-‘A’),但這里小寫的ASCII值大于大寫的ASCII值你該要記住的吧。12.防止溢出的一個(gè)方法

8、:#defineINC_

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。