



下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、寫好C語言,漂亮的宏定義很重要2009-12-09 17:08寫好C語言,漂亮的宏定義很重要,使用宏定義可以防止出錯(cuò),提高可移植性,可讀性,方便性 等等。下面列舉一些成熟軟件中常用得宏定義。1,防止一個(gè)頭文件被重復(fù)包含 #ifndef COMDEFJH #defi ne COMDEF_H頭文件內(nèi)容#en dif2,重新定義一些類型,防止由于各種平臺(tái)和編譯器的不同,而產(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,得到指定地址上的一個(gè)字節(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、到一個(gè)field在結(jié)構(gòu)體(struct)中的偏移量/*lint -e545 */ ( (dword) &( type *) 0)-> field ) /*lint +e545 */6,得到一個(gè)結(jié)構(gòu)體中field 所占用的字節(jié)數(shù)#define FSIZ( type, field ) sizeof( (type *) 0)->field )7,按照 LSB 格式把兩個(gè)字節(jié)轉(zhuǎn)化為一個(gè) Word #define FLIPW( ray ) ( (word) (ray)0) << 8) + (ray)1 )8,按照 LSB 格式把一個(gè) Word 轉(zhuǎn)化為兩個(gè)字節(jié)#define
7、(ray)1 = (val) & 0xFF)9,得到一個(gè)變量的地址( word 寬度)#define B_PTR( var ) ( (byte *) (void *) &(var) ) #define W_PTR( var ) ( (word *) (void *) &(var) )10,得到一個(gè)字的高位和低位字節(jié) #define WORD_LO(*) (byte) (word)(*) & 255) #define WORD_HI(*) (byte) (word)(*) >> 8)11,返回一個(gè)比 X 大的最接近的 8 的倍數(shù)#define RND8
8、( x )(x) + 7) / 8 ) * 8 )12,將一個(gè)字母轉(zhuǎn)換為大寫 #define UPCASE( c ) ( (c) >= 'a' && (c) <= 'z') ? (c) - 0x20) : (c) )13,判斷字符是不是 10 進(jìn)值的數(shù)字#define DECCHK( c ) (c) >= '0' && (c) <= '9')14,判斷字符是不是 16 進(jìn)值的數(shù)字#define(c) >= 'a' && (c) <=
9、 'f') )15,防止溢出的一個(gè)方法 #define INC_SAT( val ) (val = (val)+1 > (val) ? (val)+1 : (val)16,返回?cái)?shù)組元素的個(gè)數(shù) #define ARR_SIZE( a ) ( sizeof( (a) ) / sizeof( (a0) ) ) 17,返回一個(gè)無符號(hào)數(shù) n 尾的值 MOD_BY_P0WER_OF_TWO(X,n) =X%(2n)( (dword)(val) & (dword)(mod_by)-1) )18 ,對(duì)于 IO 空間映射在存儲(chǔ)空間的結(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 標(biāo)準(zhǔn)說明了五個(gè)預(yù)
11、定義的宏名。它們是:如果編譯不是標(biāo)準(zhǔn)的, 則可能僅支持以上宏名中的幾個(gè), 或根本不支持。 記住編譯程序也許還提供其它預(yù)定義的宏名。_ L I N E _及_ F I L E _宏指令在有關(guān) # l i n e 的部分中已討論,這里討論其余的宏名。_ D AT E _宏指令含有形式為月 /日/年的串, 表示源文件被翻譯到代碼時(shí)的日期。源代碼翻譯到目標(biāo)代碼的時(shí)間作為串包含在 _ T I M E _中。串形式為時(shí):分:秒。如果實(shí)現(xiàn)是標(biāo)準(zhǔn)的, 則宏_ S T D C _含有十進(jìn)制常量 1。如果它含有任何其它數(shù),則實(shí)現(xiàn)是非標(biāo)準(zhǔn)的??梢远x宏,例如 :當(dāng)定義了 DEBUG,輸出數(shù)據(jù)信息和所在文件所在行 #ifdef _DEBUG#define DEBUGMSG(msg,date)printf(msg)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 中國充氣池項(xiàng)目投資可行性研究報(bào)告
- 2025年度房地產(chǎn)項(xiàng)目廉潔施工協(xié)議
- 2025年園藝建筑用木網(wǎng)片項(xiàng)目可行性研究報(bào)告
- 2025年度打井設(shè)備研發(fā)與生產(chǎn)合同范本
- 2025版國際貿(mào)易結(jié)算信用證保函合同
- 主題三 任務(wù)三 應(yīng)用圖層 教學(xué)設(shè)計(jì) -2023-2024學(xué)年桂科版初中信息技術(shù)七年級(jí)下冊(cè)
- 電飯煲買賣合同合同范本
- 2025年度珠寶店珠寶首飾設(shè)計(jì)研發(fā)合作協(xié)議
- 穿梭貨架合同范本
- 2025年度幼兒園園長選拔與管理服務(wù)合同
- 2024-2030年中國留學(xué)服務(wù)行業(yè)市場前景預(yù)測及發(fā)展戰(zhàn)略規(guī)劃分析報(bào)告
- 消火栓及自動(dòng)噴水滅火系統(tǒng)裝置技術(shù)規(guī)格書
- 2024年體育競技:運(yùn)動(dòng)員與俱樂部保密協(xié)議
- 小學(xué)數(shù)學(xué)新教材培訓(xùn)
- 初中作文課件教學(xué)課件
- 軍隊(duì)文職(會(huì)計(jì)學(xué))考試(重點(diǎn))題庫200題(含答案解析)
- 小兒急性喉炎護(hù)理查房
- 亞??谱o(hù)理建設(shè)思路
- 公務(wù)員2019年國考《申論》真題及答案(地市級(jí))
- 輪系獲獎(jiǎng)?wù)n件
- 小學(xué)三年級(jí)下冊(cè)體育教案
評(píng)論
0/150
提交評(píng)論