版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
課程主要內(nèi)容預(yù)處理位操作問題與習(xí)題第一部分專題主要內(nèi)容
1.1宏定義1.2條件編譯1.3文件包含2.1位操作1.1宏定義(1)宏定義普通宏#definePI(3.1415926)帶參數(shù)的宏#definemax(a,b)((a)>(b)?(a),(b))取消定義#undef MacroName為什么要用宏定義維護(hù)性:有時我們需要將某個特定數(shù)據(jù)(如某個數(shù)據(jù)表的大?。┰诔绦蛑谐霈F(xiàn)的所有實例統(tǒng)統(tǒng)加以修改,我們希望能夠只做一個改動就達(dá)到目的#defineMAXSIZE100在函數(shù)調(diào)用的時候會帶來重大的系統(tǒng)開銷,因此我們有時希望有一個程序塊,看上去像一個函數(shù),但卻沒有函數(shù)調(diào)用的開銷#definemax(a,b)(((a)>=(b))?(a):(b))提高程序的易讀性:文字比數(shù)字要容易理解多,一個好的宏名可以顧名思義。1.1宏定義(2)宏定義的特點宏定義值使用宏名代替一個字符串,不做語法檢查對程序中用雙括號括起來的字符串內(nèi)部的字符,即使與宏名相同,也不進(jìn)行替換函數(shù)調(diào)用和宏定義的區(qū)別函數(shù)調(diào)用時,先求出實參表達(dá)式的值,然后代入形參。而使用帶參數(shù)的宏只是進(jìn)行簡單的字符替換對于函數(shù)調(diào)用,對實參要進(jìn)行類型檢查,如果實參與形參類型不一致,應(yīng)進(jìn)行類型轉(zhuǎn)換,如果無法轉(zhuǎn)換,編譯時會出錯。但是宏定義不會做類型檢查宏定義和類型定義的區(qū)別宏定義不做語法檢查,可以把任何字符串定義成類型#defineAinteger/*integer不是一個合法的類型*/使用宏定義結(jié)果有時與預(yù)期的不同#defineT1structstudent*Typedefstructstudent*T2;T1a,b;/*相當(dāng)于structstudent*a,b,b不是結(jié)構(gòu)體指針,與預(yù)期的不同*/T2a,b;1.1宏定義(3)使用宏定義需要注意不要忽視宏定義中的空格#definef(x)(x)+1//實際上是把f定義成了(x)(x)+1
對于不帶參數(shù)的宏,若宏值多于一項,一定要使用括號#defineMAX(M+N)要給每個參數(shù)加上括號,否則可能會影響計算的優(yōu)先級#defineabs(x)(x>=0)?x:-xz=abs(a+b);/*相當(dāng)于z=(a+b>=0)?a+b:-a+b//修改后#defineabs(x)((x)>=0?(x):-(x)盡量用typedef而不是宏定義去定義類型1.2條件編譯條件編譯例子
#ifdefBMW #defineSIZE16 #else#defineSIZE32 #endif條件編譯指令#ifdef…#else…#endif#ifndef…#else…#endif#if1…#else…#endif#if0…#else…#endif條件編譯的應(yīng)用解決頭文件重復(fù)包含的問題在調(diào)試時,用條件編譯的方式將debug語句加入;在修改Bug時候,用條件編譯方式引入新的修正,并保留原來的程序;1.3文件包含頭文件包含#include“xxxx.h”含義是在編譯時將頭文件的內(nèi)容加入到包含文件中。頭文件包含的方式#include“xxxx.h”到本級目錄去找。#include<xxxx.h>到系統(tǒng)默認(rèn)目錄和本級目錄去找。重復(fù)包含(重復(fù)定義)由于頭文件包含可以嵌套,那么C文件就有可能包含多次同一個頭文件,就可能出現(xiàn)重復(fù)定義的問題的通過條件編譯開關(guān)來避免重復(fù)包含(重復(fù)定義)例如#ifndef__headerfileXXX__
#define__headerfileXXX__
…文件內(nèi)容
…#endif2.1位操作(1)基本位操作符<<,>>如(0x01)<<4=0x10;(0x80)>>4=0x08位操作應(yīng)用舉例乘法、除法,例如a*8可以寫成a<<3;地址計算,例如一個32位的地址裝在元素類型是char的數(shù)組a[4]中(假設(shè)按照從低到高存放),那么計算這個地址的方法為((a[3]<<24)|(a[2]<<16)|(a[1]<<8)|a[0]容易出現(xiàn)的問題盡量使用無符號變量,避免產(chǎn)生符號錯誤;注意避免發(fā)生數(shù)據(jù)溢出;2.1位操作(2)位運(yùn)算符例子分析請分析下面問題的含義。
#typedefunsignedchar
UINT1
#typedefunsignedshort
UINT2
#typedefunsignedlong
UINT4問題1:
#define
MC_GET_CHAR(__data__)
\ (*((UINT1*)(__data__))) 問題2: #defineMC_GET_SHORT(__data__)\ ((UINT2)((((UINT2)(*((UINT1*)(__data__))))<<8)\ |((UINT2)(*((UINT1*)(__data__)+1)))&0x00ff)))2.1位操作(3) 問題3:
#define
MC_GET_LONG(__data__)
\ ((((UINT4)MC_GET_SHORT((__data__)))<<16)\ |(((UINT4)MC_GET_SHORT(__data__+2))&0x0000ffff)) 問題4:
#defineMC_GET_3BN(__data__)
\ ((((UINT4)MC_GET_CHAR((__data__)))<<16)\ |(((UINT4)MC_GET_SHORT(__data__+1))&
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 教學(xué)課件修改教學(xué)課件
- 流感演練課件教學(xué)課件
- 2024光學(xué)儀器研發(fā)與制造合作合同
- 2024年太陽能光伏發(fā)電項目開發(fā)合作協(xié)議
- 2024專利實施許可合同實施范圍與許可條件
- 2024年度影視制作合同(含制作項目、投資額)
- 2024年度物流服務(wù)合同標(biāo)的貨物運(yùn)輸與服務(wù)內(nèi)容
- 2024乙方向甲方提供品牌授權(quán)使用合同
- 2024年度特許經(jīng)營合同標(biāo)的為連鎖餐飲品牌
- 2024年度網(wǎng)絡(luò)安全風(fēng)險評估與管理服務(wù)合同
- 2024二十屆三中全會知識競賽題庫及答案
- 預(yù)防接種工作規(guī)范(2023年版)解讀課件
- 醫(yī)院檢驗外包服務(wù)項目招標(biāo)文件
- 檔案整理及數(shù)字化服務(wù)方案
- 正高級會計師答辯面試資料
- 布魯納《教育過程》
- 樣品承認(rèn)書標(biāo)準(zhǔn)版
- 田間生產(chǎn)管理記錄檔案
- 道路橋涵工程施工方案(完整版)
- 智慧城市建設(shè)論文5篇
- 人教版八年級地理(上冊)期中試卷及答案(完整)
評論
0/150
提交評論