




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
課程主要內容預處理位操作問題與習題第一部分專題主要內容
1.1宏定義1.2條件編譯1.3文件包含2.1位操作1.1宏定義(1)宏定義普通宏#definePI(3.1415926)帶參數的宏#definemax(a,b)((a)>(b)?(a),(b))取消定義#undef MacroName為什么要用宏定義維護性:有時我們需要將某個特定數據(如某個數據表的大小)在程序中出現的所有實例統統加以修改,我們希望能夠只做一個改動就達到目的#defineMAXSIZE100在函數調用的時候會帶來重大的系統開銷,因此我們有時希望有一個程序塊,看上去像一個函數,但卻沒有函數調用的開銷#definemax(a,b)(((a)>=(b))?(a):(b))提高程序的易讀性:文字比數字要容易理解多,一個好的宏名可以顧名思義。1.1宏定義(2)宏定義的特點宏定義值使用宏名代替一個字符串,不做語法檢查對程序中用雙括號括起來的字符串內部的字符,即使與宏名相同,也不進行替換函數調用和宏定義的區別函數調用時,先求出實參表達式的值,然后代入形參。而使用帶參數的宏只是進行簡單的字符替換對于函數調用,對實參要進行類型檢查,如果實參與形參類型不一致,應進行類型轉換,如果無法轉換,編譯時會出錯。但是宏定義不會做類型檢查宏定義和類型定義的區別宏定義不做語法檢查,可以把任何字符串定義成類型#defineAinteger/*integer不是一個合法的類型*/使用宏定義結果有時與預期的不同#defineT1structstudent*Typedefstructstudent*T2;T1a,b;/*相當于structstudent*a,b,b不是結構體指針,與預期的不同*/T2a,b;1.1宏定義(3)使用宏定義需要注意不要忽視宏定義中的空格#definef(x)(x)+1//實際上是把f定義成了(x)(x)+1
對于不帶參數的宏,若宏值多于一項,一定要使用括號#defineMAX(M+N)要給每個參數加上括號,否則可能會影響計算的優先級#defineabs(x)(x>=0)?x:-xz=abs(a+b);/*相當于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條件編譯的應用解決頭文件重復包含的問題在調試時,用條件編譯的方式將debug語句加入;在修改Bug時候,用條件編譯方式引入新的修正,并保留原來的程序;1.3文件包含頭文件包含#include“xxxx.h”含義是在編譯時將頭文件的內容加入到包含文件中。頭文件包含的方式#include“xxxx.h”到本級目錄去找。#include<xxxx.h>到系統默認目錄和本級目錄去找。重復包含(重復定義)由于頭文件包含可以嵌套,那么C文件就有可能包含多次同一個頭文件,就可能出現重復定義的問題的通過條件編譯開關來避免重復包含(重復定義)例如#ifndef__headerfileXXX__
#define__headerfileXXX__
…文件內容
…#endif2.1位操作(1)基本位操作符<<,>>如(0x01)<<4=0x10;(0x80)>>4=0x08位操作應用舉例乘法、除法,例如a*8可以寫成a<<3;地址計算,例如一個32位的地址裝在元素類型是char的數組a[4]中(假設按照從低到高存放),那么計算這個地址的方法為((a[3]<<24)|(a[2]<<16)|(a[1]<<8)|a[0]容易出現的問題盡量使用無符號變量,避免產生符號錯誤;注意避免發生數據溢出;2.1位操作(2)位運算符例子分析請分析下面問題的含義。
#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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《GBT19004-2020質量管理組織的質量實現持續成功指南》(2025版)深度解析
- 《精通職場英語》課件
- 高級審計師考試的注意事項總結試題及答案
- 考試期間的中級會計試題及答案
- 社會公德宣傳教育活動實施流程
- 《血液透析技術與護理》課件
- 家的秘密:大班安全防護指南
- 醫療機構安全生產培訓大綱
- 《星辰汽車制造公司介紹》課件
- 腎小球硬化的臨床護理
- 二年級乘除法口訣專項練習1000題
- DB35T 2148-2023 養殖大黃魚等級規格
- 藥企與醫療機構合作協議書范文
- 高空作業安全技術交底范本模板
- 道路旅客運輸企業雙重預防機制建設指導手冊
- 數據庫安全技術賀桂英測驗題答案
- 保育員職業道德與素養
- 免稅龍頭中國中免發展機會深度解析
- 2024年北京市中考物理試題(含答案及解析)
- 嬰幼兒神經系統的特點與保健(嬰幼兒衛生保健課件)
- 2024年甘肅省天水市中考生物·地理試題卷(含答案)
評論
0/150
提交評論