




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、新編c語言程序設(shè)計教程 清華大學(xué)出版社周二強(qiáng) 軟件學(xué)院 計算機(jī)科學(xué)與工程系配套視頻: 博客: 預(yù)處理預(yù)處理 8.1 程序編譯 8.2 宏定義 8.2.1 簡單宏 8.2.2 參數(shù)化宏 8.3 文件包含 8.4 條件編譯8.1 程序編譯程序編譯 編譯系統(tǒng)把一個c程序編譯成可執(zhí)行目標(biāo)文件的過程可簡單地分成兩個階段:編譯匯編階段和鏈接階段。 一個c語言程序可能包含多個源文件,在vc6.0中用工程(project)把多個相關(guān)的源文件組織在一起。編譯匯編階段 編譯匯編階段把源文件翻譯成由相應(yīng)的機(jī)器指令組成的二進(jìn)制文件。 在vc6.0中單擊【組建(build)】【編譯(compile)】命令就可以把源文件
2、編譯匯編了。編譯匯編時可以檢查出源文件中的語法錯誤。鏈接階段 鏈接階段把與c語言程序相關(guān)的二進(jìn)制文件合并為一個可執(zhí)行目標(biāo)文件。在vc6.0中單擊【組建(build)】【組建(build)】命令就可以把程序鏈接為一個可執(zhí)行文件。 鏈接階段的主要任務(wù)是處理具有全局作用域的標(biāo)識符在多個文件中的使用問題。 當(dāng)兩個源文件中定義了相同的全局作用域標(biāo)識符或一個源文件中引用了其它源文件中并沒有定義的全局作用域標(biāo)識符時,鏈接階段就會出錯。源文件的組成 源文件通常由命令如include和c語言語句兩部分組成。 在源文件被編譯之前,源文件中的命令需要被稱為“預(yù)處理器”的程序處理,因此源文件中的命令又稱為“預(yù)處理命令
3、”。 預(yù)處理命令的主要作用是方便程序的編寫。 與c語言語句相比,它常以#開頭,也不以分號結(jié)束。經(jīng)過預(yù)處理后的源文件就只有c語言語句了。預(yù)處理階段 c語言編譯系統(tǒng)如vc6.0、tc等都集成有預(yù)處理器,當(dāng)程序被編譯時,預(yù)處理器首先被調(diào)用執(zhí)行。因此,編譯系統(tǒng)的編譯過程又可細(xì)分為預(yù)處理階段、編譯匯編階段和鏈接階段。 c語言提供的預(yù)處理命令主要有3種:1.宏定義2.文件包含3.條件編譯return8.2 宏定義宏定義 c語言的宏利用define命令定義,一般形式為:#define 標(biāo)識符 值 其中,標(biāo)識符稱為宏名,值稱為宏體。宏定義后,源文件中應(yīng)該出現(xiàn)宏體的地方均可用宏名代替。 預(yù)處理器在預(yù)處理時會把宏
4、名用宏體替換,這個過程稱為“宏展開”。宏展開只是一種機(jī)械性的操作,類似于文本編輯中的查找替換。(見標(biāo)識符才替換) 宏分為兩類:簡單宏和參數(shù)化宏。8.2.1 簡單宏簡單宏 簡單宏的使用可以方便程序的修改,也可讓程序書寫簡單 。1. 源文件中以標(biāo)識符形式出現(xiàn)的宏名才會被宏體替換 2. #define pi 3.1415926;中宏pi 的宏體為3.1415926;。而語句area = pi * r * r;會被預(yù)處器修改為 3. undef 命令可以取消一個宏定義,一般形式為:#undef 宏名4. 宏名也有作用域,在作用域內(nèi)的宏名才會被替換。一個宏的作用域起自定義之后,終止于被取消定義的命令行或
5、定義該宏的源文件結(jié)束處。宏展開 在進(jìn)行宏定義時,可以引用已定義的宏。預(yù)處理器在預(yù)處理時會對替換后的語句重新掃描,以便對其中的宏再次展開。return8.2.2 參數(shù)化宏參數(shù)化宏 參數(shù)化宏就是帶參數(shù)的宏,可以實現(xiàn)復(fù)雜的替換,定義形式如下: #define 標(biāo)識符(參數(shù)列表) 值 其中,左圓括號必須緊跟在宏名之后不能有空格,否則,“(參數(shù)列表) 值”會被認(rèn)為是宏體,宏也就成了簡單宏。參數(shù)列表與函數(shù)的類似,如可以有零個或多個參數(shù),但宏的參數(shù)沒有類型說明。 參數(shù)化宏的使用方式類似函數(shù)調(diào)用,形式如下: 宏名(實參列表)參數(shù)化宏的調(diào)用 在預(yù)處理時,參數(shù)化宏的調(diào)用會被宏體替換,并且宏體中以標(biāo)識符形式出現(xiàn)的形
6、參會被相對應(yīng)的實參代替,接著,預(yù)處理器會繼續(xù)掃描宏體以便進(jìn)行必要的宏展開。例8-4 參數(shù)化宏與函數(shù)returnmyabs(-3.5) = 0.0中的0.0是因為用格式字符f輸出整型變量時類型不匹配所致,如改為printf(myabs(-3.5) = %dn, myabs(-3.5);,則輸出為 8.3 文件包含文件包含 文件包含命令include的作用是讓預(yù)處理器以指定文件的內(nèi)容取代該命令行。文件包含命令的常見形式有兩種: #include #include 文件名 文件包含命令同宏類似,也是簡單的替換。文件包含中的文件通常被稱為頭文件,擴(kuò)展名為.h。頭文件的內(nèi)容一般為宏定義和全局變量及函數(shù)的
7、聲明。頭文件中也可包含include命令及其它的預(yù)處理命令。 當(dāng)一個頭文件被多次包含進(jìn)源文件時,就有可能出現(xiàn)某個標(biāo)識符被多次定義的錯誤。例8-5 頭文件的多次包含 預(yù)處理器第一次處理后8_5.c的內(nèi)容如下: 預(yù)處理器第二次處理后8_5.c的內(nèi)容如下: return8.4 條件編譯條件編譯 條件編譯命令使預(yù)處理器有選擇的在源程序中保留或刪除某程序段。使用條件編譯命令的一般形式為: #ifndef 宏名 程序段 #endif 如果宏名在源文件中沒有被定義,則預(yù)處理時程序段就會保留在源文件中;如果宏名已經(jīng)有定義了,則程序段在預(yù)處理時會被刪除。 可以利用條件編譯命令ifndef和endif解決頭文件多
8、次包含引起的標(biāo)識符被重復(fù)定義的問題。修改例8-5中header1.h利用條件編譯命令解決標(biāo)識符被重復(fù)定義的問題defined 預(yù)處理命令中有一個內(nèi)部函數(shù)defined,它需一個宏名作參數(shù)。若作為參數(shù)的宏名已經(jīng)有定義,則defined函數(shù)返回1,否則它返回0。defined也被看作是一個操作符,因此,“defined(宏名)”與“defined 宏名”等價。注意defined前面不帶#號。 “#ifndef 宏名”等價于“# if !defined(宏名)”,也就是說if是一個條件編譯指令,它后面表達(dá)式中的操作數(shù)只能是整型字面量。如果表達(dá)式的值為真,則相關(guān)程序段會被留在源程序中,否則相關(guān)程序段在預(yù)處理時會被刪除。“#ifdef 宏名”等價于 “#if defined(宏名)”。其它的條件編譯指令 條件編譯指令還有elif(相當(dāng)于el
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025標(biāo)準(zhǔn)物流運(yùn)輸合同樣本
- 2025長沙辦公樓租賃合同范本
- 2025【企業(yè)短期融資借款合同】公司短期融資合同
- 2025年GPS接收設(shè)備及其綜合應(yīng)用系統(tǒng)合作協(xié)議書
- 2025幕墻設(shè)計與施工合同范本
- 2025實習(xí)生聘用合同模板與協(xié)議范本
- 2025年聚陰離子纖維素合作協(xié)議書
- 2025如何規(guī)避裝修合同風(fēng)險:專家提供的策略與指南
- 2025合同范本在應(yīng)用軟件代理中的運(yùn)用研究
- 2025網(wǎng)絡(luò)旅行社合作合同協(xié)議書
- ISOTS 22163專題培訓(xùn)考試
- 六年級下冊數(shù)學(xué)課件-第4單元 比例 整理和復(fù)習(xí) 人教版(共21張PPT)
- JJF(魯) 142-2022 稱重式雨量計校準(zhǔn)規(guī)范
- Adobe-Illustrator-(Ai)基礎(chǔ)教程
- 程序的運(yùn)行結(jié)果PPT學(xué)習(xí)教案
- 圓柱鋼模計算書
- 合成寶石特征x
- 查擺問題及整改措施
- 年度研發(fā)費用專項審計報告模板(共22頁)
- 隧道工程隧道支護(hù)結(jié)構(gòu)設(shè)計實用教案
- 得力打卡機(jī)破解Excel工作表保護(hù)密碼4頁
評論
0/150
提交評論