下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、寫好C語言,漂亮的宏定義很重要2009-12-09 17:08寫好C語言,漂亮的宏定義很重要,使用宏定義可以防止出錯,提高可移植性,可讀性,方便性 等等。下面列舉一些成熟軟件中常用得宏定義。1,防止一個頭文件被重復(fù)包含 #ifndef COMDEFJH #defi ne COMDEF_H頭文件內(nèi)容#en dif2,重新定義一些類型,防止由于各種平臺和編譯器的不同,而產(chǎn)生的類型字節(jié)數(shù)差異,方便移植。typ edefun sig ned charboolea n;/* Boolea n value type. */typ edefun sig ned long intui nt32;/* Un s
2、ig ned 32 bit value */typ edefun sig ned shortui nt16;/* Un sig ned 16 bit value */typ edefun sig ned charuin t8;/* Un sig ned 8 bit value */typ edefsig ned long intin t32;/* Sig ned 32 bit value */typ edefsig ned shortin t16;/* Sig ned 16 bit value */typ edefsig ned charin t8;/* Sig ned 8 bit value
3、 */下面的不建議使用typ edefun sig ned charbyte;typ edefun sig ned shortword;typ edefun sig ned longdword;typ edefun sig ned charuint1;typ edefun sig ned shortuin t2;/* Un sig ned 8 bit value type. */* Un si nged 16 bit value type. */* Un sig ned 32 bit value type. */* Un sig ned 8 bit value type. */* Un sig
4、 ned 16 bit value type. */typedefunsigned longuint4;/* Unsigned 32 bit value type. */typedefsigned charint1;/* Signed 8 bit value type. */typedefsigned shortint2;/* Signed 16 bit value type. */typedeflong intint4;/* Signed 32 bit value type. */typedefsigned longsint31;/* Signed 32 bit value */typede
5、fsigned shortsint15;/* Signed 16 bit value */typedefsigned charsint7;/* Signed 8 bit value */3,得到指定地址上的一個字節(jié)或字 #define MEM_B( x ) ( *( (byte *) (x) ) ) #define MEM_W( x ) ( *( (word *) (x) ) )4,求最大值和最小值#define MAX( x, y ) ( (x) > (y) ? (x) : (y) )#define MIN( x, y ) ( (x) < (y) ? (x) : (y) )5,得
6、到一個field在結(jié)構(gòu)體(struct)中的偏移量/*lint -e545 */ ( (dword) &( type *) 0)-> field ) /*lint +e545 */6,得到一個結(jié)構(gòu)體中field 所占用的字節(jié)數(shù)#define FSIZ( type, field ) sizeof( (type *) 0)->field )7,按照 LSB 格式把兩個字節(jié)轉(zhuǎn)化為一個 Word #define FLIPW( ray ) ( (word) (ray)0) << 8) + (ray)1 )8,按照 LSB 格式把一個 Word 轉(zhuǎn)化為兩個字節(jié)#define
7、(ray)1 = (val) & 0xFF)9,得到一個變量的地址( word 寬度)#define B_PTR( var ) ( (byte *) (void *) &(var) ) #define W_PTR( var ) ( (word *) (void *) &(var) )10,得到一個字的高位和低位字節(jié) #define WORD_LO(*) (byte) (word)(*) & 255) #define WORD_HI(*) (byte) (word)(*) >> 8)11,返回一個比 X 大的最接近的 8 的倍數(shù)#define RND8
8、( x )(x) + 7) / 8 ) * 8 )12,將一個字母轉(zhuǎn)換為大寫 #define UPCASE( c ) ( (c) >= 'a' && (c) <= 'z') ? (c) - 0x20) : (c) )13,判斷字符是不是 10 進值的數(shù)字#define DECCHK( c ) (c) >= '0' && (c) <= '9')14,判斷字符是不是 16 進值的數(shù)字#define(c) >= 'a' && (c) <=
9、 'f') )15,防止溢出的一個方法 #define INC_SAT( val ) (val = (val)+1 > (val) ? (val)+1 : (val)16,返回數(shù)組元素的個數(shù) #define ARR_SIZE( a ) ( sizeof( (a) ) / sizeof( (a0) ) ) 17,返回一個無符號數(shù) n 尾的值 MOD_BY_P0WER_OF_TWO(X,n) =X%(2n)( (dword)(val) & (dword)(mod_by)-1) )18 ,對于 IO 空間映射在存儲空間的結(jié)構(gòu),輸入輸出處理#define inp(port
10、)(*(volatile byte *) (port)#define inpdw(port)(*(volatile dword *)(port)#define outp(port, val) (*(volatile byte *) (port) = (byte) (val)#define outpw(port, val) (*(volatile word *) (port) = (word) (val)#define outpdw(port, val) (*(volatile dword *) (port) = (dword) (val)19,使用一些宏跟蹤調(diào)試A N S I 標準說明了五個預(yù)
11、定義的宏名。它們是:如果編譯不是標準的, 則可能僅支持以上宏名中的幾個, 或根本不支持。 記住編譯程序也許還提供其它預(yù)定義的宏名。_ L I N E _及_ F I L E _宏指令在有關(guān) # l i n e 的部分中已討論,這里討論其余的宏名。_ D AT E _宏指令含有形式為月 /日/年的串, 表示源文件被翻譯到代碼時的日期。源代碼翻譯到目標代碼的時間作為串包含在 _ T I M E _中。串形式為時:分:秒。如果實現(xiàn)是標準的, 則宏_ S T D C _含有十進制常量 1。如果它含有任何其它數(shù),則實現(xiàn)是非標準的。可以定義宏,例如 :當定義了 DEBUG,輸出數(shù)據(jù)信息和所在文件所在行 #ifdef _DEBUG#define DEBUGMSG(msg,date)printf(msg)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單位管理制度匯編大合集【人事管理篇】十篇
- 單位管理制度合并匯編員工管理
- 《眩暈基礎(chǔ)知識》課件
- 單位管理制度分享大全【職工管理篇】十篇
- 單位管理制度范例合集【員工管理】十篇
- 單位管理制度呈現(xiàn)匯編人力資源管理十篇
- 單位管理制度呈現(xiàn)大合集【職工管理】十篇
- 《離心泵工作點》課件
- 貴都高速某合同段施工組織設(shè)計
- 《祝世界好友周快樂》課件
- “雙減”初中九年級英語課時作業(yè)設(shè)計案例
- 廣東省潮州市暨實高級中學(xué)2024-2025學(xué)年高二上學(xué)期9月月考語文試題
- GB/T 44415-2024基于全球衛(wèi)星導(dǎo)航的機動車制動性能路試檢驗要求和方法
- 物流園區(qū)運營管理合同
- 紅船女子(2022年安徽中考語文試卷記敘文閱讀題及答案)
- 空氣動力學(xué)實驗方法:激光多普勒測速(LDV):原理與應(yīng)用
- 反思單元 沈括的“海陸變遷”說(習(xí)題教學(xué)設(shè)計)2023-2024學(xué)年三年級上冊科學(xué)(大象版 河南專用)
- 2023-2024屆高考語文復(fù)習(xí)-閱讀與訓(xùn)練主題+工匠精神(含答案)
- 裝表接電培訓(xùn)課件
- 新蘇教版五年級上冊科學(xué)全冊期末復(fù)習(xí)知識點(彩版)
- 部編版小學(xué)一年級上冊道德與法治教學(xué)設(shè)計(第三、第四單元)
評論
0/150
提交評論