資源描述:
《c語(yǔ)言宏定義使用技巧編程技術(shù)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、C語(yǔ)言宏定義使用技巧編程技術(shù)寫好C語(yǔ)言,漂亮的宏定義很重要,使用宏定義可以防止出錯(cuò),提高可移植性,可讀性,方便性等等。下面列舉一些成熟軟件中常用得宏定義…… 1,防止一個(gè)頭文件被重復(fù)包含 #ifndefCOMDEF_H #defineCOMDEF_H //頭文件內(nèi)容 #endif 2,重新定義一些類型,防止由于各種平臺(tái)和編譯器的不同,而產(chǎn)生的類型字節(jié)數(shù)差異,方便移植。 typedefunsignedcharboolean;/*Booleanvaluetype.*/ typedefunsignedlongintu
2、int32;/*Unsigned32bitvalue*/ typedefunsignedshortuint16;/*Unsigned16bitvalue*/ typedefunsignedcharuint8;/*Unsigned8bitvalue*/ typedefsignedlongintint32;/*Signed32bitvalue*/ typedefsignedshortint16;/*Signed16bitvalue*/ typedefsignedcharint8;/*Signed8bitvalue*/
3、//下面的不建議使用 typedefunsignedcharbyte;/*Unsigned8bitvaluetype.*/ typedefunsignedshortword;/*Unsinged16bitvaluetype.*/ typedefunsignedlongdword;/*Unsigned32bitvaluetype.*/ typedefunsignedcharuint1;/*Unsigned8bitvaluetype.*/ typedefunsignedshortuint2;/*Unsigned16bit
4、valuetype.*/ typedefunsignedlonguint4;/*Unsigned32bitvaluetype.*/ typedefsignedcharint1;/*Signed8bitvaluetype.*/ typedefsignedshortint2;/*Signed16bitvaluetype.*/ typedeflongintint4;/*Signed32bitvaluetype.*/ typedefsignedlongsint31;/*Signed32bitvalue*/ typedefs
5、ignedshortsint15;/*Signed16bitvalue*/ typedefsignedcharsint7;/*Signed8bitvalue*/ 3,得到指定地址上的一個(gè)字節(jié)或字 #defineMEM_B(x)(*((byte*)(x))) #defineMEM_W(x)(*((word*)(x))) 4,求最大值和最小值 #defineMAX(x,y)(((x)>(y))?(x):(y)) #defineMIN(x,y)(((x)<(y))?(x):(y)) 5,得到一個(gè)field在結(jié)構(gòu)體(s
6、truct)中的偏移量 #defineFPOS(type,field) /*lint-e545*/((dword)&((type*)0)->field)/*lint+e545*/ 6,得到一個(gè)結(jié)構(gòu)體中field所占用的字節(jié)數(shù) #defineFSIZ(type,field)sizeof(((type*)0)->field) 7,按照LSB格式把兩個(gè)字節(jié)轉(zhuǎn)化為一個(gè)Word #defineFLIPW(ray)((((word)(ray)[0])*256)+(ray)[1]) 8,按照LSB格式把一個(gè)Word轉(zhuǎn)化為兩個(gè)
7、字節(jié) #defineFLOPW(ray,val) (ray)[0]=((val)/256); (ray)[1]=((val)&0xFF) 9,得到一個(gè)變量的地址(word寬度) #defineB_PTR(var)((byte*)(void*)&(var)) #defineW_PTR(var)((word*)(void*)&(var)) 10,得到一個(gè)字的高位和低位字節(jié) #defineWORD_LO(***)((byte)((word)(***)&255)) #defineWORD_HI(***)((byt
8、e)((word)(***)>>8)) 11,返回一個(gè)比X大的最接近的8的倍數(shù) #defineRND8(x)((((x)+7)/8)*8) 12,將一個(gè)字母轉(zhuǎn)換為大寫 #defineUPCASE(c)(((c)>='a'&&(c)<='z')?((c)-0x20):(