




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
課程主要內容預處理位操作問題與習題第一部分專題主要內容
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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公路灑水養護方案范本
- 新餐廳木工施工方案
- 湖南中醫藥高等專科學校《高雅藝術走進學生》2023-2024學年第二學期期末試卷
- 三明醫學科技職業學院《信息系統項目管理》2023-2024學年第二學期期末試卷
- 組合鋼模板襯砌施工方案
- 荊州職業技術學院《藥物合成實驗》2023-2024學年第二學期期末試卷
- 湖北鍍鋅橋架施工方案
- 湖南鐵路科技職業技術學院《基礎化學原理》2023-2024學年第二學期期末試卷
- 九江理工職業學院《智能移動設備應用軟件開發》2023-2024學年第二學期期末試卷
- 汝州職業技術學院《中西醫結合外科學2》2023-2024學年第一學期期末試卷
- 胎兒心臟超聲檢查課件詳解
- 2023年06月天津市便民專線服務中心招考聘用合同制員工筆試題庫含答案解析
- 2023年高速公路監理工程師質量目標責任書
- 抖音政務號運營建設方案版
- 醫學檢驗心壁的組織結構
- 《小池》說課稿 小學一年級語文教案PPT模板下載
- 廣州酒店中英文對照
- GB/T 819.1-2000十字槽沉頭螺釘第1部分:鋼4.8級
- GB/T 4323-2002彈性套柱銷聯軸器
- 《倫理學原理》教學課件
- GB/T 12168-2006帶電作業用遮蔽罩
評論
0/150
提交評論