c語言常用宏定義技巧

c語言常用宏定義技巧

ID:6464359

大小:49.92 KB

頁數:57頁

時間:2018-01-14

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

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

1、C語言常用宏定義技巧C語言常用宏定義技巧2推薦C語言常用宏定義技巧用C語言編程,宏定義是個很重要的編程技巧。用好了宏定義,它可以增強程序的可讀性、可移植性、方便性、靈活性等等。1.防止一個頭文件被重復包含:#ifndefCOMDEF_H#defineCOMDEF_H//頭文件內容#endif當你所建的工程有多個源文件組成時,很可能會在多個文件里頭包含了同一個頭文件,如果借用上面的宏定義就能夠避免同一個頭文件被重復包含時進行多次編譯。因為當它編譯第一個頭文件時總是沒有定義#defineCOMDEF_H,那么它將編譯一遍頭文件中所有的內容,包括定義#defineCOMDEF_H。這

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

3、typedefsignedlongintint32;/*Signed32bitvalue*/typedefsignedshortint16;/*Signed16bitvalue*/typedefsignedcharint8;/*Signed8bitvalue*/3.得到指定地址的一個字節(jié)或字:#defineMEM_B(x)(*((uint8*)(x)))#defineMEM_W(x)(*((uint16*)(x)))注:類似于這種有多個字符串組成的宏定義一定要注意加上“()”,因為我們知道宏定義只是一種簡單的字符替換功能。4.求最大值和最小值:#defineMAX(x,y)((

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

5、(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)是為了防止多語句的宏定義在使用中出錯。比如:if(…)FLOPW(ray,val)else上面的程序代碼中要是宏定義FLOPW(ray,val)中沒有do{}while(0),這時我們應該將語句改為:if(…){FLOPW(ray,val)}else{}8.

6、得到一個變量的地址:#defineB_PTR(var)((byte*)(void*)&(var))#defineW_PTR(var)((word*)(void*)&(var))注:宏定義語句中void*申明了該地址可以是任何類型變量的地址,byte*申明為單字節(jié)變量的地址,word*申明為雙字節(jié)變量的地址。9.得到一個高位和低位字節(jié):#defineWORD_LO(xxx)((byte)((word)(xxx)&0xFF))#defineWORD_HI(xxx)((byte)((word)(xxx)>>8))10.返回一個比X大的最接近的8的倍數:#defineRND8(x)((

7、((x)+7)/8)*8)11.將一個字母轉換為大寫:#defineUPCASE(c)(((c)>=‘a’&&(c)<=‘z’)?((c)–0x20):(c))相對應的還有將一個字母轉換為小寫:#defineUPCASE(c)(((c)>=‘A’&&(c)<=‘Z’)?((c)+0x20):(c))注:如果你記不住大寫和小寫之間的ASCII差值,可以將0x20換成(’a’-‘A’),但這里小寫的ASCII值大于大寫的ASCII值你該要記住的吧。12.防止溢出的一個方法:#defineINC_

當前文檔最多預覽五頁,下載文檔查看全文

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

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