![C語言宏定義技巧單片機常用_第1頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/23/0e0ae479-5b54-4ec2-9c93-b2cd842f2a12/0e0ae479-5b54-4ec2-9c93-b2cd842f2a121.gif)
![C語言宏定義技巧單片機常用_第2頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/23/0e0ae479-5b54-4ec2-9c93-b2cd842f2a12/0e0ae479-5b54-4ec2-9c93-b2cd842f2a122.gif)
![C語言宏定義技巧單片機常用_第3頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/23/0e0ae479-5b54-4ec2-9c93-b2cd842f2a12/0e0ae479-5b54-4ec2-9c93-b2cd842f2a123.gif)
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、C 語言宏定義技巧(常用宏定義)等等。寫好 C 語言,漂亮的宏定義很重要,使用宏定義可以防止出錯,提高可移植性,可讀性,方便性 下面列舉一些成熟軟件中常用得宏定義。 。1,防止一個頭文件被重復(fù)包含 #ifndef COMDEF_H #define COMDEF_H/ 頭文件內(nèi)容#endif2,重新定義一些類型,防止由于各種平臺和編譯器的不同,而產(chǎn)生的類型字節(jié)數(shù)差異,方便移植。typedef unsigned charboolean;/* Boolean value type. */typedef unsigned long int uint32;/* Unsigned 32 bit value
2、 */typedef unsigned shortuint16;/* Unsigned 16 bit value */typedef unsigned charuint8;/* Unsigned 8 bit value */typedef signed long intint32;/* Signed 32 bit value */typedef signed shortint16;/* Signed 16 bit value */typedef signed charint8;/* Signed 8 bit value */下面的不建議使用typedef unsigned charbyte;/
3、* Unsigned 8 bit value type. */typedef unsigned shortword;/* Unsinged 16 bit value type. */typedef unsigned longdword;/* Unsigned 32 bit value type. */typedef unsigned charuint1;/* Unsigned 8 bit value type. */typedef unsigned shortuint2;/* Unsigned 16 bit value type. */typedef unsigned longuint4;/*
4、 Unsigned 32 bit value type. */typedef signed charint1;/* Signed 8 bit value type. */typedef signed shortint2;/* Signed 16 bit value type. */typedef long intint4;/* Signed 32 bit value type. */typedef signed longsint31;/* Signed 32 bit value */typedef signed shortsint15;/* Signed 16 bit value */type
5、def signed 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,得到一個 field 在結(jié)構(gòu)體 (struct) 中的偏移量 #define FPOS( typ
6、e, field ) /*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) * 256) + (ray)1 ) 8,按照 LSB 格式把一個 Word 轉(zhuǎn)化為兩個字節(jié)#define FLOPW( ray, val
7、 ) (ray)0 = (val) / 256); (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(xxx) (byte) (word)(xxx) & 255) #define WORD_HI(xxx) (byte) (word)(xxx) >> 8
8、) 11,返回一個比 X 大的最接近的 8 的倍數(shù) #define RND8( 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 HE
9、XCHK( c ) ( (c) >= '0' && (c) <= '9') |(c) >= 'A' && (c) <= 'F') |(c) >= 'a' && (c) <= 'f') ) 15,防止溢出的一個方法#define INC_SA T( val ) (val = (val)+1 > (val) ? (val)+1 : (val) 16,返回數(shù)組元素的個數(shù)#define ARR_SIZE( a ) (
10、sizeof( (a) ) / sizeof( (a0) ) )17, 返回一個無符號數(shù) n 尾的值 M0D_BY_P0WER_0F_TW0(X,n)=X%(2An) #define MOD_BY_POWER_OF_TWO( val, mod_by ) ( (dword)(val) & (dword)(mod_by)-1) )18, 對于 IO 空間映射在存儲空間的結(jié)構(gòu),輸入輸出處理#define inp(port)#define inpw(port)#define inpdw(port)(*(volatile byte *) (port) (*(volatile word *) (p
11、ort) (*(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) 2005-9-9 添加 19, 使用一些宏跟蹤調(diào)試A N S I 標(biāo)準(zhǔn)說明了五個預(yù)定義的宏名。它們是:_ L I N E _ F I L
12、 E _ D A T E _ T I M E _ S T D C _ 如果編譯不是標(biāo)準(zhǔn)的,則可能僅支持以上宏名中的幾個,或根本不支持。記住編譯程序 也許還提供其它預(yù)定義的宏名。_ L I N E _及_ F I L E _宏指令在有關(guān) # l i n e 的部分中已討論,這里討論其余的宏名。_ D AT E _宏指令含有形式為月 /日 /年的串,表示源文件被翻譯到代碼時的日期。 源代碼翻譯到目標(biāo)代碼的時間作為串包含在 _ T I M E _ 中。串形式為時:分:秒。 如果實現(xiàn)是標(biāo)準(zhǔn)的,則宏 _ S T D C _ 含有十進制常量 1。如果它含有任何其它數(shù),則實現(xiàn)是 非標(biāo)準(zhǔn)的。可以定義宏,例如 :當(dāng)定義了 _DEBUG ,輸出數(shù)據(jù)信息和所在文件所在行#ifdef _DEBUG#define DEBUGMSG(msg,date) printf(msg);printf(“ %d%d%”d ,date_,_LFIN
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年自動平滑門項目可行性研究報告
- 2025年竹纖維家居服項目可行性研究報告
- 2025至2031年中國電池專用材料行業(yè)投資前景及策略咨詢研究報告
- 2025年水管手推車項目可行性研究報告
- 2025年顯微(細胞)電泳系統(tǒng)項目可行性研究報告
- 2025至2031年中國尋像器行業(yè)投資前景及策略咨詢研究報告
- 2025至2031年中國商業(yè)印刷票據(jù)表格行業(yè)投資前景及策略咨詢研究報告
- 2025至2031年中國兒童多用臺行業(yè)投資前景及策略咨詢研究報告
- 2025年免維護閥控式鉛酸電池項目可行性研究報告
- 2025年U型收音機項目可行性研究報告
- 大學(xué)生就業(yè)指導(dǎo)教學(xué)-大學(xué)生就業(yè)形勢與政策
- 第五講鑄牢中華民族共同體意識-2024年形勢與政策
- 安檢服務(wù)課件教學(xué)課件
- 隧道危險源清單
- 中華人民共和國學(xué)前教育法
- 2024年貴州公務(wù)員考試申論試題(B卷)
- 解剖臺項目運營指導(dǎo)方案
- 抑郁癥課件教學(xué)課件
- 關(guān)于消防安全評估設(shè)備操作說明詳解
- 2025年高考作文專練(25道真題+審題立意+范文)- 2025年高考語文作文備考總復(fù)習(xí)
評論
0/150
提交評論