版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第13章編譯預(yù)處理13.1概述13.2宏定義13.3文件包含13.4條件編譯
13.1概述
在前面各章內(nèi)容中,曾多次使用過以“#”開頭的命令。如文件包含命令#include、宏定義命令#define等。在C語言程序設(shè)計中,這些以“#”開頭的命令一般放在函數(shù)之外,而且通常放在源文件的前面,被稱為預(yù)處理命令。
13.2宏定義
13.2.1無參宏定義
無參宏定義是用一個指定的標(biāo)識符(名字)來代表一個字符串的,在實際軟件開發(fā)過程中有非常廣泛的應(yīng)用。
無參宏定義的一般形式可表示為:
#define標(biāo)識符字符串
【例13-1】已知半徑,求對應(yīng)圓的周長、面積和球的體積。
解析:定義變量r表示圓的半徑,圓的周長、面積和體積分別用變量c,s,v表示,則程序源代碼可這樣來寫:圖13.1例13-1運(yùn)行結(jié)果這種宏定義在大型程序開發(fā)過程中有諸多優(yōu)點:
(1)提高程序的可讀性。
(2)可以極大地方便程序的修改。
(3)用宏名來代替字符串,可以減少程序輸入過程中重復(fù)輸入的某些字符串。
1.宏定義替換表達(dá)式或字符串
【例13-2】宏替換實例。圖13.2例13-2運(yùn)行結(jié)果
【例13-3】宏定義替換字符串的實例。圖13.3例13-3運(yùn)行結(jié)果
2.用#undef宏定義作用域
【例13-4】宏定義作用域的實例。
3.宏名用引號括起來的情況
【例13-5】宏的使用實例。
4.宏定義允許嵌套
在宏定義的字符串中可以使用已經(jīng)定義的宏名。在宏展開時由預(yù)處理程序?qū)訉哟鷵Q。例如:
#definePI3.1415926
#defineSPI*y*y /*PI是已定義的宏名*/
語句:
printf(“%f”,S);
在宏代換后變?yōu)椋?/p>
printf("%f",3.1415926*y*y);
5.用宏定義表示數(shù)據(jù)類型
例如:
#defineSTUstructstu
在程序中可用STU作變量說明:
STUbody[5],*p;
#defineINTEGERint
在程序中即可用INTEGER作整型變量說明:
INTEGERa,b;13.2.2帶參宏定義
C語言允許宏定義時帶有參數(shù),我們將這種形式的宏定義稱為帶參宏定義。在宏定義中的參數(shù)稱為形式參數(shù),在宏調(diào)用中的參數(shù)稱為實際參數(shù)。
對帶參數(shù)的宏,在調(diào)用中不僅要進(jìn)行宏展開,而且要用實參去代換形參。
帶參數(shù)的宏定義不是進(jìn)行簡單的字符串置換,一般情況下還要進(jìn)行參數(shù)置換,其通用的表達(dá)形式為:
#define宏名(形參表)字符串
1.帶參宏定義應(yīng)用示例
【例13-6】帶參宏實例。圖13.4例13-6運(yùn)行結(jié)果
【例13-7】帶參宏實例1。圖13.5例13-7運(yùn)行結(jié)果
【例13-8】帶參宏實例2。圖13.6例13-8運(yùn)行結(jié)果
【例13-9】帶參宏實例3。圖13.7例13-9運(yùn)行結(jié)果
【例13-10】帶參宏實例4。圖13.8例13-10運(yùn)行結(jié)果
2.帶參的宏定義和帶參函數(shù)的區(qū)別
【例13-11】函數(shù)處理實例。圖13.9例13-11運(yùn)行結(jié)果
【例13-12】宏處理實例。圖13.10例13-12運(yùn)行結(jié)果
【例13-13】宏定義實例。圖13.11例13-13運(yùn)行結(jié)果
13.3文件包含
文件包含是C語言預(yù)處理程序的另一個重要功能。它指一個源文件可以將另外一個源文件全部內(nèi)容包含進(jìn)來,也就是將其它文件包含到本文件之中,C語言提供了“#include”命令來實現(xiàn)文件包含。文件包含命令行的一般形式為:
#include“文件名”
在前面我們已多次用此命令包含過庫函數(shù)的頭文件。例如:
#include“stdio.h”
#include"math.h"圖13.12文件包含原理圖
【例13-14】將格式宏做成頭文件,把它包含到用戶程序中。
(1)將格式宏制作成頭文件format.h。
(2)將頭文件format.h包含到主文件中。
13.4條件編譯
(1)第一種形式:它的功能是:如果標(biāo)識符已被#define命令定義過,則對程序段1進(jìn)行編譯;否則對程序段2進(jìn)行編譯。如果沒有程序段2(它為空),本格式中的#else可以沒有,即可以寫為:
#ifdef標(biāo)識符
程序段
#endif
【例13-15】條件編譯實例。圖13.13例13-15的運(yùn)行結(jié)果
(2)第二種形式:
#ifndef標(biāo)識符
程序段1
#else
程序段2
#endif
(3)第三種形式:
#if常量表達(dá)式
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度班組承包合同履行期限與合同解除3篇
- 2025年度池塘生態(tài)漁業(yè)項目租賃合同3篇
- 二零二五版幼兒園連鎖經(jīng)營承包管理服務(wù)合同3篇
- 二零二五年股權(quán)融資合同聚焦新能源領(lǐng)域3篇
- 二零二五年度大渡口環(huán)保吸污車租賃與市場推廣服務(wù)協(xié)議3篇
- 2025年數(shù)據(jù)中心物業(yè)承包經(jīng)營合同模板3篇
- 2024版商用建筑項目合作合同精簡版版B版
- 個性化2024勞務(wù)派遣服務(wù)協(xié)議版B版
- 二零二五版旅游項目投資擔(dān)保合同3篇
- 2025年房屋租賃續(xù)租協(xié)議2篇
- 二年級下冊加減混合豎式練習(xí)360題附答案
- GB/T 21709.5-2008針灸技術(shù)操作規(guī)范第5部分:拔罐
- 大三上-診斷學(xué)復(fù)習(xí)重點
- 應(yīng)收賬款的管理培訓(xùn)課件
- 2021年道路交通安全法期末考試試題含答案
- 股東變更情況報告表
- 自帶藥物治療告知書
- 房產(chǎn)中介門店6S管理規(guī)范
- 吞咽解剖和生理研究
- TSG11-2020 鍋爐安全技術(shù)規(guī)程
- 異地就醫(yī)備案個人承諾書
評論
0/150
提交評論