![清華譚浩強(qiáng)C語言教學(xué)-第9章 預(yù)處理命令ppt課件_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/4/181fef58-0a98-4087-ac9b-14f71adabebd/181fef58-0a98-4087-ac9b-14f71adabebd1.gif)
![清華譚浩強(qiáng)C語言教學(xué)-第9章 預(yù)處理命令ppt課件_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/4/181fef58-0a98-4087-ac9b-14f71adabebd/181fef58-0a98-4087-ac9b-14f71adabebd2.gif)
![清華譚浩強(qiáng)C語言教學(xué)-第9章 預(yù)處理命令ppt課件_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/4/181fef58-0a98-4087-ac9b-14f71adabebd/181fef58-0a98-4087-ac9b-14f71adabebd3.gif)
![清華譚浩強(qiáng)C語言教學(xué)-第9章 預(yù)處理命令ppt課件_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/4/181fef58-0a98-4087-ac9b-14f71adabebd/181fef58-0a98-4087-ac9b-14f71adabebd4.gif)
![清華譚浩強(qiáng)C語言教學(xué)-第9章 預(yù)處理命令ppt課件_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/4/181fef58-0a98-4087-ac9b-14f71adabebd/181fef58-0a98-4087-ac9b-14f71adabebd5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、編譯預(yù)處理:在源程序文件中,參與編譯預(yù)處理:在源程序文件中,參與“編譯預(yù)編譯預(yù)處理命令處理命令”,使編譯程序在對源程序進(jìn)行通,使編譯程序在對源程序進(jìn)行通常的編譯包括詞法分析、語法分析、代碼常的編譯包括詞法分析、語法分析、代碼生成、代碼優(yōu)化之前,先對這些命令進(jìn)行生成、代碼優(yōu)化之前,先對這些命令進(jìn)行預(yù)處理,然后將預(yù)處理的結(jié)果和源程序一起預(yù)處理,然后將預(yù)處理的結(jié)果和源程序一起再進(jìn)行通常的編譯處理,以得到目標(biāo)代碼再進(jìn)行通常的編譯處理,以得到目標(biāo)代碼OBJ文件)。文件)。vC提供的編譯預(yù)處理命令提供的編譯預(yù)處理命令v宏命令宏命令Macro)v文件包含命令文件包含命令include)v條件編譯命令條件編譯
2、命令v這些命令均以這些命令均以#開頭,以區(qū)別于語句。開頭,以區(qū)別于語句。v一、不帶參數(shù)的宏一、不帶參數(shù)的宏v一般形式:一般形式: #define 標(biāo)識符標(biāo)識符 字符串字符串v如:如: #define PI 3.1415926v作用:用標(biāo)識符稱為作用:用標(biāo)識符稱為“宏名宏名”)PI代替字符串代替字符串“3.1415926”。v在預(yù)編譯時,將源程序中出現(xiàn)的宏名在預(yù)編譯時,將源程序中出現(xiàn)的宏名PI替換為字符替換為字符串串“3.1415926”,這一替換過程稱為這一替換過程稱為“宏展開宏展開”。v#define:宏定義命令:宏定義命令v#undef:終止宏定義命令:終止宏定義命令例例#define P
3、I 3.1415926 main()float l,s,r,v; printf(input radius:);scanf(%f,&r); /* 輸入圓的半徑輸入圓的半徑 */l = 2.0*PI*r; /* 圓周長圓周長 */ s = PI*r*r; /* 圓面積圓面積 */v = 4.0/3.0*PI*r*r*r; /* 球體積球體積 */printf(l=%10.4fns=%10.4fnv=%10.4fn,l,s,v);v說明:v1、一般宏名用大寫字母表示。(變量名一般用小寫字母)。v2、使用宏可以提高程序的可讀性和可移植性。如上述程序中,多處需要使用值,用宏名既便于修改又意義明確
4、。v3、宏定義是用宏名代替字符串,宏擴(kuò)展時僅作簡單替換,不檢查語法。語法檢查在編譯時進(jìn)行。v4、宏定義不是C語句,后面不能有分號。如果加入分號,則連分號一起替換。如:如:#define PI 3.1415926;area = P*r*r;在宏擴(kuò)展后成為:在宏擴(kuò)展后成為:area = 3.1315926;*r*r;結(jié)果,在編譯時出現(xiàn)語法錯誤。結(jié)果,在編譯時出現(xiàn)語法錯誤。v5、通常把、通常把#define命令放在一個文件的開頭,使其在命令放在一個文件的開頭,使其在本文件全部有效。(本文件全部有效。(#define定義的宏僅在本文件有效,定義的宏僅在本文件有效,在其它文件中無效,這與全局變量不同)。
5、在其它文件中無效,這與全局變量不同)。v6、宏定義終止命令、宏定義終止命令 #undef結(jié)束先前定義的宏名。結(jié)束先前定義的宏名。v#define G 9.8vmain()v v v#undef G /* 取消取消G的意義的意義 */vf1()v v7、宏定義中可以引用已定義的宏名。、宏定義中可以引用已定義的宏名。v例例8.2 v#define R 3.0v#define PI 3.1415926v#deinfe L 2*PI*R v#define S PI*R*Rvmain()vvprintf(L=%fnS=%fn,L,S); vv8、對程序中用雙引號括起來的字符串,即使與宏名相、對程序中用雙
6、引號括起來的字符串,即使與宏名相同,也不替換。例如上例的同,也不替換。例如上例的printf語句中,雙引號括起語句中,雙引號括起來來L和和S不被替換。不被替換。v二、帶參數(shù)的宏二、帶參數(shù)的宏v一般形式:一般形式:v#define 宏名參數(shù)表)宏名參數(shù)表) 字符串字符串v帶參數(shù)的宏在展開時,不是進(jìn)行簡單的字符串帶參數(shù)的宏在展開時,不是進(jìn)行簡單的字符串替換,而是進(jìn)行參數(shù)替換。例、替換,而是進(jìn)行參數(shù)替換。例、v例例v#define PI 3.1415926v#define S(r) PI*r*rvmain()v float a, area;v a = 3.6;v area = S(a); v pri
7、ntf(r=%fnarea=%fn,a,area);vv說明:說明:v 帶參數(shù)的宏展開時,用實(shí)參字符串替換形參字符串,帶參數(shù)的宏展開時,用實(shí)參字符串替換形參字符串,注意可能發(fā)生的錯誤。比較好的辦法是宏定義的形參注意可能發(fā)生的錯誤。比較好的辦法是宏定義的形參加括號。加括號。area=3.1415926aa,但不會置換,但不會置換a為為3.6v說明:說明:v對帶參數(shù)的宏定義的置換展開是用對帶參數(shù)的宏定義的置換展開是用“表達(dá)式對等表達(dá)式對等的置換的置換“形參表中的參數(shù)。上例中的形參表中的參數(shù)。上例中的“”是不是不會被置換。會被置換。v宏名與括號之間不得有空格,因?yàn)楹昝c表達(dá)式之宏名與括號之間不得有空
8、格,因?yàn)楹昝c表達(dá)式之間的分隔符為空格。間的分隔符為空格。v如果用如果用 #define S (r) PI r r 的話,則被置換的話,則被置換為為 area=(r) PI r r (a)v宏展開并不進(jìn)行值的傳遞,即不求表達(dá)式的值,也宏展開并不進(jìn)行值的傳遞,即不求表達(dá)式的值,也沒有沒有“返回值的概念。返回值的概念。v宏不存在類型問題,宏名無類型,參數(shù)也無類型,宏不存在類型問題,宏名無類型,參數(shù)也無類型,表達(dá)式可以是任何類型。表達(dá)式可以是任何類型。 定義帶參數(shù)的宏,可以實(shí)現(xiàn)一些簡單的函數(shù)功能。定義帶參數(shù)的宏,可以實(shí)現(xiàn)一些簡單的函數(shù)功能。如:如:#define MAX(x,y) (x)(y)?(x
9、) : (y) main( )int a, b, c, t ; t = MAX(a+b, c+d); 注:這里的注:這里的 t 展開后為展開后為 t = (a+b)(c+d)?(a+b):(c+d)如果第一行寫成:如果第一行寫成: #define MAX(x,y) xy ? x : y結(jié)果不同!結(jié)果不同!因?yàn)橹脫Q展開是用因?yàn)橹脫Q展開是用 “表達(dá)式表達(dá)式” 對等對等 的置換的置換 “形參表形參表” 中的中的參數(shù)參數(shù)v例例 返回多個值的宏定義。返回多個值的宏定義。v#define PI 3.1415926v#define CIRCLE(R,L,S,V) L=2*PI*R;S=PI*R*R;V=4/
10、3*PI*R*R*Rvmain()v float r,l,s,v; /*半徑、圓周長、圓面積、球體半徑、圓周長、圓面積、球體積積 */vscanf(%f,&r);vCIRCLE(r,l,s,v); vprintf(r=%6.2f,l=%6.2f,s=%6.2f,v=%6.2fn,r,l,s,v);v例例 輸出格式定義為宏輸出格式定義為宏#define PR printf#define NL n#define D %d #define D1 D NL#define D2 D D NL#define D3 D D D NL#define D4 D D D D NL#define S %sm
11、ain() int a,b,c,d;char string = CHINA;a = 1; b = 2; c = 3; d = 4;PR(D1,a);PR(D2,a,b); PR(D3,a,b,c);PR(D4,a,b,c,d);PR(S,string);文件包含命令的一般格式是:文件包含命令的一般格式是:#include “文件名文件名”作用:預(yù)處理時,把作用:預(yù)處理時,把“文件名指定的文件內(nèi)容復(fù)制文件名指定的文件內(nèi)容復(fù)制到本文件,再對合并后的文件進(jìn)行編譯。到本文件,再對合并后的文件進(jìn)行編譯。在在file1.c文件中,有文件包含命令文件中,有文件包含命令#include file2.c,預(yù)處理
12、時,先把,預(yù)處理時,先把file2.c的內(nèi)容復(fù)制的內(nèi)容復(fù)制到文件到文件file1.c,再對,再對file1.c進(jìn)行編譯。進(jìn)行編譯。從理論上說,從理論上說,#include命令可以包含任何類型命令可以包含任何類型的文件,只要這些文件的內(nèi)容被擴(kuò)展后符合的文件,只要這些文件的內(nèi)容被擴(kuò)展后符合C語言語法。語言語法。一般一般#include命令用于包含擴(kuò)展名為命令用于包含擴(kuò)展名為.h的的“頭頭文件文件”,如,如stdio.h、string.h、math.h。在。在這些文件中,一般定義符號常量、宏,或聲這些文件中,一般定義符號常量、宏,或聲明函數(shù)原型。明函數(shù)原型。程序員也可以把自己定義的符號常程序員也可以
13、把自己定義的符號常量、宏,或函數(shù)原型放在頭文件中,量、宏,或函數(shù)原型放在頭文件中,用用#include命令包含這些頭文件。命令包含這些頭文件。(1文件文件print_format.h#define PR printf#define NL n#define D %d #define D1 D NL#define D2 D D NL#define D3 D D D NL#define D4 D D D D NL#define S %s(2文件文件file1.c#include print_format.h“main() int a,b,c,d;char string = CHINA;a = 1;
14、b = 2; c = 3; d = 4;PR(D1,a);PR(D2,a,b); PR(D3,a,b,c);PR(D4,a,b,c,d);PR(S,string);說明:說明:1、一個、一個include命令只能指定一個被包含文件,如果命令只能指定一個被包含文件,如果要包含要包含n個文件,用個文件,用n個個Include命令。命令。2、#include命令的文件名,可以使用兩種括號。命令的文件名,可以使用兩種括號。#include file2.h 先在引用被包含文件的目錄查找先在引用被包含文件的目錄查找file2.h文件,若沒有,再到系統(tǒng)指定的目錄查找。文件,若沒有,再到系統(tǒng)指定的目錄查找。
15、#include 僅在系統(tǒng)指定的目錄查找文件僅在系統(tǒng)指定的目錄查找文件file2.h。3、假如、假如“文件文件1包含包含“文件文件2”,而,而“文件文件2又包含又包含“文件文件3”,則可在,則可在 “文件文件1” 中使中使用兩個用兩個 include 命命 令。令。4、文件包含可以嵌套。即一個被包含文件中、文件包含可以嵌套。即一個被包含文件中又可以包含另一個文件。又可以包含另一個文件。文件文件file1.c#include“file3.h”#include“file2.h”file3.h 應(yīng)出現(xiàn)在應(yīng)出現(xiàn)在 file2.h 之前之前文件文件file1.c#include“file2.h”文件文件
16、file2.c#include“file3.h”9.3 條件編譯1條件編譯的語句形式:條件編譯的語句形式:1) #ifdef 標(biāo)識符標(biāo)識符 程序段程序段1 #else 程序段程序段2 #endif其作用是:假如其作用是:假如“標(biāo)識符已定義,則編譯標(biāo)識符已定義,則編譯“程序段程序段1”,否則編譯,否則編譯“程序段程序段2” 。v說明:v1、“標(biāo)識符一般為#define命令所定義。v2、其中的“程序段1或“程序段2可以是命令,也可以是語句或語句組。v3、#else部分可有可無。v4、所謂“標(biāo)識符已定義是無論“標(biāo)識符定義為什么內(nèi)容。v5、用條件編譯的作用是縮短編譯時間,減少目標(biāo)程序的長度。例:例:
17、#ifdef IBM_PC #define INTEGER_SIZE 16#else #define INTEGER_SIZE 32#endif2) #ifndef 標(biāo)識符標(biāo)識符程序段程序段1 #else程序段程序段2 #endif其作用是:假如其作用是:假如“標(biāo)識符未定義,則編譯標(biāo)識符未定義,則編譯“程序段程序段1” , 否則編譯否則編譯“程序段程序段2”。3) #if 表達(dá)式表達(dá)式程序段程序段1 #else程序段程序段2 #endif其作用是:當(dāng)其作用是:當(dāng)“表達(dá)式值為非表達(dá)式值為非0 ,則編譯,則編譯“程序段程序段1” , 否則編譯否則編譯“程序段程序段2”。#define LETTER 1main( ) char str20 = “C language”, c ; int i ; i = 0; while ( ( c = stri != 0 ) i + + ;
溫馨提示
- 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è)計(jì)合同
- IT項(xiàng)目規(guī)劃與實(shí)施指南
- 企業(yè)法律合規(guī)風(fēng)險防范指南
- 淘寶代理合同協(xié)議書
- 三農(nóng)村特色產(chǎn)業(yè)培育手冊
- 股份制企業(yè)的合作與管理文書
- 房地產(chǎn)開發(fā)合同標(biāo)準(zhǔn)協(xié)議
- 醫(yī)療設(shè)備智能制造與管理平臺開發(fā)
- 企業(yè)人力資源數(shù)字化管理與服務(wù)支持平臺方案設(shè)計(jì)
- 裝修工程延期協(xié)議
- 2025-2030全球21700圓柱形鋰離子電池行業(yè)調(diào)研及趨勢分析報(bào)告
- 2025-2025年教科版小學(xué)科學(xué)三年級下冊科學(xué)教學(xué)計(jì)劃
- 2025年云南中煙工業(yè)限責(zé)任公司招聘24人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025云南昆明空港投資開發(fā)集團(tuán)招聘7人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 《大健康解讀》課件
- 2024-2025學(xué)年成都市樹德東馬棚七年級上英語期末考試題(含答案)
- 2025年度交通運(yùn)輸規(guī)劃外聘專家咨詢協(xié)議3篇
- 2024年04月北京中信銀行北京分行社會招考(429)筆試歷年參考題庫附帶答案詳解
- 專項(xiàng)債券培訓(xùn)課件
- 中央企業(yè)人工智能應(yīng)用場景案例白皮書(2024年版)-中央企業(yè)人工智能協(xié)同創(chuàng)新平臺
評論
0/150
提交評論