




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、 v第第9 9章章 編譯預(yù)處理編譯預(yù)處理v第第1212章章 位運算位運算v第第1414章章 調(diào)試中的錯誤調(diào)試中的錯誤v附錄附錄 其他內(nèi)容:第9章 編譯預(yù)處理作用:作用:對源程序編譯之前,對對源程序編譯之前,對#開頭的命令做一些預(yù)處理開頭的命令做一些預(yù)處理種類:種類: 宏定義宏定義 #define 文件包含文件包含 #include 條件編譯條件編譯 #if-#else-#endif等等格式:格式: “#”開頭開頭 占單獨書寫行占單獨書寫行 語句尾不加分號語句尾不加分號如 if(x=YES) printf(“correct!n”); else if (x=NO) printf(“error!n”
2、);展開后: if(x=1) printf(“correct!n”); else if (x=0) printf(“error!n”);9.1 宏定義宏定義不帶參數(shù)宏定義不帶參數(shù)宏定義一般形式:一般形式: #define 宏名宏名 宏體宏體功能功能:用指定標(biāo)識符用指定標(biāo)識符(宏名宏名)代替字符序列代替字符序列(宏體宏體)宏名中不允許有空格,而且必須遵循宏名中不允許有空格,而且必須遵循C變量命名規(guī)則。宏名變量命名規(guī)則。宏名一般用一般用大寫字母大寫字母。宏展開:預(yù)編譯時宏展開:預(yù)編譯時,用宏體替換宏名用宏體替換宏名-不作語法檢查不作語法檢查如 #define YES 1 #define NO 0
3、#define PI 3.1415926 #define OUT printf(“Hello,World”);定義位置定義位置:一般在程序開頭一般在程序開頭作用域作用域:從定義命令到文件結(jié)束從定義命令到文件結(jié)束#undef可終止宏名作用域可終止宏名作用域 格式:格式: #undef 宏名宏名例 #define YES 1 main() . #undef YES #define YES 0 max() . YES原作用域YES新作用域新作用域宏定義可嵌套,不能遞歸宏定義可嵌套,不能遞歸例 #define MAX MAX+10 ( )引號中的內(nèi)容與宏名相同不需置換引號中的內(nèi)容與宏名相同不需置換例
4、#define PI 3.14159 printf(“2*PI=%fn”,PI*2);宏展開:printf(“2*PI=%fn”,3.14159*2);宏定義中使用必要的括號宏定義中使用必要的括號()()例 #define WIDTH 80 #define LENGTH WIDTH+40 var=LENGTH*2;宏展開:var= 80+40 *2;( )( )例 #define WIDTH 80 #define LENGTH WIDTH+40 var=LENGTH*2;宏展開:var= 80+40 *2;帶參數(shù)宏定義帶參數(shù)宏定義一般形式:一般形式: #define 宏名宏名(參數(shù)表參數(shù)表)
5、宏體宏體宏展開:形參用實參置換,其它字符保留宏展開:形參用實參置換,其它字符保留宏體及各形參外一般應(yīng)加括號宏體及各形參外一般應(yīng)加括號()()例例 #define S(a,b) a*b . area=S(3,2);宏展開宏展開: area=3*2;例 #define POWER(x) x*x x=4; y=6; z=POWER(x+y);宏展開:z=x+y*x+y;一般寫成:一般寫成: #define POWER(x) (x)*(x)宏展開:宏展開: z=(x+y)*(x+y);#define MAX(x,y) (x)(y)?(x):(y) .main() int a,b,c,d,t; . t=
6、MAX(a+b,c+d); 宏展開:t=(a+b)(c+d)?(a+b):(c+d);int max(int x,int y) return(xy?x:y);main() int a,b,c,d,t; . t=max(a+b,c+d); 用宏定義和函數(shù)實現(xiàn)同樣的功能用宏定義和函數(shù)實現(xiàn)同樣的功能思考:比較宏定義和函數(shù)思考:比較宏定義和函數(shù)帶參的宏與函數(shù)區(qū)別帶參的宏與函數(shù)區(qū)別帶參宏函數(shù)處理過程不分配內(nèi)存簡單的字符置換分配內(nèi)存先求實參值,再代入形參處理時間預(yù)編譯時程序運行時參數(shù)類型無類型問題定義實參,形參類型程序長度變長不變運行速度不占運行時間調(diào)用和返回占時間9.2 文件包含文件包含功能:功能:一個
7、源文件可將另一個源文件的內(nèi)容全部包含一個源文件可將另一個源文件的內(nèi)容全部包含一般形式:一般形式: #include “文件名文件名” 或或 #include #include “file2.c”file1.cfile2.cfile1.cfile2.cABA處理過程:處理過程:預(yù)編譯時,用被包含文件的內(nèi)容取代該預(yù)預(yù)編譯時,用被包含文件的內(nèi)容取代該預(yù)處理命令,再對處理命令,再對“包含包含”后的文件作一個源文件編譯后的文件作一個源文件編譯 直接按標(biāo)準(zhǔn)目錄搜索直接按標(biāo)準(zhǔn)目錄搜索“”“” 先在先在當(dāng)前目錄當(dāng)前目錄搜索,再搜索標(biāo)準(zhǔn)目錄搜索,再搜索標(biāo)準(zhǔn)目錄被包含文件內(nèi)容被包含文件內(nèi)容源文件源文件(*.c)
8、如:如:#include“file2.c”頭文件頭文件(*.h)系統(tǒng)頭文件系統(tǒng)頭文件 如:如:#include用戶自定義頭文件用戶自定義頭文件 如:如: #include“myhead.h”頭文件應(yīng)包含如下一些內(nèi)容:頭文件應(yīng)包含如下一些內(nèi)容: 類型定義類型定義 函數(shù)原型函數(shù)原型 內(nèi)聯(lián)函數(shù)聲明內(nèi)聯(lián)函數(shù)聲明 全局?jǐn)?shù)據(jù)聲明全局?jǐn)?shù)據(jù)聲明 常量定義常量定義 包含指令包含指令 宏定義宏定義 注釋注釋頭文件不能包含以下內(nèi)容:頭文件不能包含以下內(nèi)容: 一般函數(shù)定義一般函數(shù)定義 數(shù)據(jù)定義數(shù)據(jù)定義文件包含可嵌套文件包含可嵌套#include “file2.c”file1.cAfile3.cC#include “f
9、ile3.c”file2.c Bfile1.cAfile3.cfile2.c例例 文件包含舉例文件包含舉例/* powers.h */#define sqr(x) (x)*(x)#define cube(x) (x)*(x)*(x)#define quad(x) (x)*(x)*(x)*(x)#include #include d:shabkcpowers.h#define MAX_POWER 10void main() int n; printf(numbert exp2t exp3t exp4n); printf(-t-t-t-n); for(n=1;n=MAX_POWER;n+) pri
10、ntf(%2dt %3dt %4dt %5dn,n,sqr(n),cube(n),quad(n);9.3 條件編譯條件編譯 功能:根據(jù)指定的標(biāo)識符是否被定義過,確定在程序編譯功能:根據(jù)指定的標(biāo)識符是否被定義過,確定在程序編譯階段編譯哪一段程序段。階段編譯哪一段程序段。 形式形式1:#if 表達(dá)式表達(dá)式 程序段程序段1 #else 程序段程序段2 #endif 例例97 根據(jù)需要設(shè)置條件編譯,能將字母全根據(jù)需要設(shè)置條件編譯,能將字母全改為大寫輸出,或全改為小寫字母輸出。改為大寫輸出,或全改為小寫字母輸出。#define LETTER1main()char str20=C Language,c;
11、int i; i=0 while(c=stri)!=0) i+;#if LETTER if(c=a & c=Z) c=c-32; #else if(c=A & c=Z) c=c+32; #endif printf(%c,c); 形式形式2:#ifdef 標(biāo)識符標(biāo)識符 程序段程序段1 #else 程序段程序段2 #endif 形式形式3: #ifndef 標(biāo)識符標(biāo)識符 程序段程序段1 #else 程序段程序段2 #endif 例:在調(diào)試程序時,常常希望輸出一些所需的信息,而在調(diào)試?yán)涸谡{(diào)試程序時,常常希望輸出一些所需的信息,而在調(diào)試完成后不再輸出這些信息,可在源程序中插入以下的條
12、件編完成后不再輸出這些信息,可在源程序中插入以下的條件編譯段:譯段: #ifdef DEBUG printf(”x=%d,y=%d,z=%dn”,x,y,z); #endif1、有以下程序、有以下程序 # define f(x) (x*x) void main() int i1, i2; i1=f(8)/f(4) ; i2=f(4+4)/f(2+2) ; printf(%d, %dn,i1,i2); 程序運行后的輸出結(jié)果是程序運行后的輸出結(jié)果是_A_。 A)64, 28 B)4, 4 C)4, 3 D)64, 642、C語言的編譯系統(tǒng)對宏命令對處理是語言的編譯系統(tǒng)對宏命令對處理是_D_。(A)
13、 在程序運行時進(jìn)行的在程序運行時進(jìn)行的(B) 在程序連接時進(jìn)行的在程序連接時進(jìn)行的(C) 和和C程序中的其它語句同時進(jìn)行編譯的程序中的其它語句同時進(jìn)行編譯的(D) 在對源程序中其它成分正式編譯之前進(jìn)行在對源程序中其它成分正式編譯之前進(jìn)行3、以下有關(guān)宏替換的敘述錯誤的是、以下有關(guān)宏替換的敘述錯誤的是_C_。A)宏名不具有類型)宏名不具有類型 B)宏替換不占用運行時間)宏替換不占用運行時間C)宏名必須用大寫字母表示)宏名必須用大寫字母表示D)宏替換只是字符替換)宏替換只是字符替換8*8/4*4=644+4*4+4/2+2*2+2=28小小 結(jié)結(jié)v 編譯預(yù)處理的種類:編譯預(yù)處理的種類: 宏定義宏定義
14、 #define 文件包含文件包含 #include 條件編譯條件編譯 #if-#else-#endif等等v 格式:格式: “#”開頭開頭 占單獨書寫行占單獨書寫行 語句尾不加分號語句尾不加分號 v位運算符和位運算位運算符和位運算v位段位段第12章 位運算 C語言能完成語言能完成匯編語言匯編語言的一些功能,這是的一些功能,這是C語言的重要特色。語言的重要特色。 計算機(jī)用于檢測控制領(lǐng)域中常用到計算機(jī)用于檢測控制領(lǐng)域中常用到位運算位運算。要學(xué)習(xí)和掌握。要學(xué)習(xí)和掌握。12 . 1 位運算符和位運算位運算符和位運算 位運算位運算 進(jìn)行進(jìn)行二進(jìn)制二進(jìn)制位位的運算的運算 。C 語言提供的位運算符:語言提
15、供的位運算符:說明:說明: 除除以外,均為雙目運算符,是兩個二進(jìn)位進(jìn)行運算。以外,均為雙目運算符,是兩個二進(jìn)位進(jìn)行運算。 運算量運算量只能是整型或字符型數(shù)據(jù),不能為實型數(shù)據(jù)只能是整型或字符型數(shù)據(jù),不能為實型數(shù)據(jù) 。運算符含義運算符含義&按位與取反|按位或右移1.按位與運算符(按位與運算符(&) 相應(yīng)位有一個二進(jìn)位為相應(yīng)位有一個二進(jìn)位為0,則結(jié)果為,則結(jié)果為0; 兩個都為兩個都為1,結(jié)果才為,結(jié)果才為1。例如:例如:3 & 5 3 = 0 0 0 0 0 0 1 1 & 5 = 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 值為值為1 例如:例如
16、: (-3) & ( -5) 先用補碼表示,然后運算。先用補碼表示,然后運算。 (-3)= 1 1 1 1 1 1 0 1 & (-5)= 1 1 1 1 1 0 1 1 1 1 1 1 1 0 0 12.按位或運算符(按位或運算符(|) 相應(yīng)位兩個中只要有一個為相應(yīng)位兩個中只要有一個為1,結(jié)果即為,結(jié)果即為1。例如:例如:060|017 0 0 1 1 0 0 0 0 (|) 0 0 0 0 1 1 1 1 0 0 1 1 1 1 1 1 3.異或運算符異或運算符() 相應(yīng)位兩個二進(jìn)位同號,結(jié)果為相應(yīng)位兩個二進(jìn)位同號,結(jié)果為0;異號則為;異號則為1。例如:例如:071052
17、0 0 1 1 1 0 0 1 () 0 0 1 0 1 0 1 0 0 0 0 1 0 0 1 14.取反運算符(取反運算符() 對一個二進(jìn)制數(shù)按位取反,將對一個二進(jìn)制數(shù)按位取反,將0變變1,1變變0。 0 0 0 1 1 0 0 1 1 1 1 0 0 1 1 05.左移運算符(左移運算符() 將一個數(shù)的各二進(jìn)位全部左移若干位(高位溢出,低位補將一個數(shù)的各二進(jìn)位全部左移若干位(高位溢出,低位補0)。)。 例如:例如:a=15;a=a1; a=15; 00001111 a=a) 將一個數(shù)的各二進(jìn)位全部右移若干位。將一個數(shù)的各二進(jìn)位全部右移若干位。分算術(shù)右移和邏輯右移。分算術(shù)右移和邏輯右移。
18、例如:例如:a=14;a=a1; a=14; 00001110 a=a1; 00000111 a=7=14/2 右移右移1位相當(dāng)于該數(shù)除以位相當(dāng)于該數(shù)除以2(變?。?。(變?。?。(邏輯右移)(邏輯右移)7.位運算賦值運算符位運算賦值運算符 &= |= = 2)/(b1)(b2)/(b1)的值是的值是 A A 。 A0 B2 C4 D82、&作單目運算符時表示的功能是作單目運算符時表示的功能是_。書上兩個綜合性例子。書上兩個綜合性例子。例例12.1 取一個整數(shù)取一個整數(shù) a 從低端開始的從低端開始的 4 7 位。位。 (1) 使使 a 右移右移4 位(目的是使位(目的是使 a 的第
19、的第4 位右移到第位右移到第0位)位) b= a 4(2) 設(shè)置一個右端設(shè)置一個右端4 位全為位全為1 其余全為其余全為 0 的數(shù),的數(shù), 方法是:方法是: (04) (見下面所示) 0: 1111.111111 04: 1111.110000 (左移4位) c= ( 04 ; c= ( 04) ; d= b& c ; printf(%o,%dn, a , a) ; printf(%o,%dn, d , d) ;a15 87 4 3 015 4 3 0 12.2 位運算舉例位運算舉例位段:位段: C語言允許在一個結(jié)構(gòu)體中以位為單位來指定其成員所占語言允許在一個結(jié)構(gòu)體中以位為單位來指定其成員所占內(nèi)存長度。這種以位為單位的成員稱為內(nèi)存長度。這種以位為單位的成員稱為“位段位段”。利用位段能。利用位段能夠用較少的位數(shù)存儲數(shù)據(jù)。夠用較少的位數(shù)存儲數(shù)據(jù)。 12.3 位段位段 信息的存取一般以字節(jié)為單位。實際上,有時存儲一個信息的存取一般以字節(jié)為單位。實際上,有時存儲一
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 加強城市公共設(shè)施安全管理計劃
- 2025年智能馬桶蓋合作協(xié)議書
- 2025年高模量玻璃纖維紗項目發(fā)展計劃
- 移動支付系統(tǒng)研發(fā)合作協(xié)議
- 從寓言故事看中華傳統(tǒng)美德的傳承與教育
- 公司信息化安全規(guī)章制度及操作手冊
- racemic-Nornicotine-Standard-生命科學(xué)試劑-MCE
- 班主任與學(xué)生家長安全協(xié)議書
- Cholesterol-n-Octanoate-Standard-生命科學(xué)試劑-MCE
- 5-Bromo-6-chloropyrazin-2-amine-生命科學(xué)試劑-MCE
- 生物-遼寧省大連市2024-2025學(xué)年高三上學(xué)期期末雙基測試卷及答案
- Unit 4 A glimpse of the future 說課稿-2023-2024學(xué)年高二下學(xué)期英語外研版(2019)選擇性必修第三冊001
- 鄉(xiāng)村建設(shè)規(guī)劃許可培訓(xùn)
- 加氣站安全課件
- 《民營企業(yè)清廉建設(shè)評價規(guī)范》
- 智能RPA財務(wù)機(jī)器人開發(fā)教程-基于來也UiBot 課件 第2章-常用機(jī)器人流程自動化
- GB/T 45037-2024糧油機(jī)械扒谷機(jī)
- 團(tuán)聚體與土壤有機(jī)質(zhì)轉(zhuǎn)化-洞察分析
- 公務(wù)車輛定點加油服務(wù)投標(biāo)文件(技術(shù)方案)
- 膝關(guān)節(jié)鏡手術(shù)后康復(fù)
- 安徽工程大學(xué)《回歸分析》2023-2024學(xué)年第一學(xué)期期末試卷
評論
0/150
提交評論