![編譯預(yù)處理課件_第1頁(yè)](http://file4.renrendoc.com/view7/M02/38/18/wKhkGWbVr8yAStjdAABkzeknonI822.jpg)
![編譯預(yù)處理課件_第2頁(yè)](http://file4.renrendoc.com/view7/M02/38/18/wKhkGWbVr8yAStjdAABkzeknonI8222.jpg)
![編譯預(yù)處理課件_第3頁(yè)](http://file4.renrendoc.com/view7/M02/38/18/wKhkGWbVr8yAStjdAABkzeknonI8223.jpg)
![編譯預(yù)處理課件_第4頁(yè)](http://file4.renrendoc.com/view7/M02/38/18/wKhkGWbVr8yAStjdAABkzeknonI8224.jpg)
![編譯預(yù)處理課件_第5頁(yè)](http://file4.renrendoc.com/view7/M02/38/18/wKhkGWbVr8yAStjdAABkzeknonI8225.jpg)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
編譯預(yù)處理12.1宏定義9.1.1不帶參數(shù)的宏定義
定義形式:#define
宏名宏體宏名是一自定義標(biāo)識(shí)符,宏體是一字符串,在程序中可用宏名代表宏體。
例如,用PI代表3.1415926,用PR代表printf,宏定義如下:
(1)#definePI3.1415926
(2)#defineePRprintf
程序中凡是出現(xiàn)3.1415926的地方,都可以以PI出現(xiàn),凡是出現(xiàn)printf的地方,都可以以PR出現(xiàn)。例9-1
利用宏定義求圓的周長(zhǎng)和面積。/*程序9-1,利用宏定義求圓的周長(zhǎng)和面積*/
#definePI3.1415926
#defineR1.0
main(){floatl,s;l=2.0*PI*R;s=PI*R*R;printf(″周長(zhǎng)=%f,面積=%f\n″,l,s);}
上面程序在編譯前將進(jìn)行宏展開(kāi),宏展開(kāi)以后變?yōu)椋?/p>
main()
{floatl,s;
l=2.0*3.1415926*1.0;
s=3.1415926*1.0*1.0;
printf(″周長(zhǎng)=%f,面積=%f\n″,l,s);
}(1)宏名一般習(xí)慣用大寫字母表示,以便與變量名相區(qū)別。當(dāng)然可以使用小寫字母。
(2)宏定義是用宏名簡(jiǎn)單替換宏體,也就是作簡(jiǎn)單的置換,不作語(yǔ)法檢查,出現(xiàn)錯(cuò)誤也不會(huì)報(bào)告,只有在宏展開(kāi)后編譯時(shí)才會(huì)報(bào)告錯(cuò)誤。
(3)程序中雙引號(hào)中與宏名相同的內(nèi)容不被替換。
(4)宏展開(kāi)后源程序?qū)⒆冮L(zhǎng)。
(5)使用宏名,可以減少程序中重復(fù)書(shū)寫某些宏體的工作量。
(6)宏定義一般放在程序的開(kāi)頭,宏名的有效范圍為定義位置到文件結(jié)束。
(7)宏定義可以嵌套,后定義的宏可使用已定義的宏。9.1.2帶參數(shù)的宏定義
定義形式:#define宏名(參數(shù)表)宏體帶參數(shù)的宏展開(kāi)時(shí)要從左至右進(jìn)行參數(shù)的簡(jiǎn)單替換,使用起來(lái)較無(wú)參數(shù)宏定義復(fù)雜。例如:
(1)#defineS(n)(n)*(n)*(n)
(2)#defineT(n)1/(n)第一個(gè)式子代表n的立方,第二個(gè)式子代表n的倒數(shù)。
說(shuō)明:
(1)列出的參數(shù)必須在宏體中用到。
(2)帶參數(shù)的宏展開(kāi)只是將實(shí)參簡(jiǎn)單替換形參。當(dāng)實(shí)參中含有運(yùn)算,宏展開(kāi)可能會(huì)出問(wèn)題。如有宏定義:#defineS(n)n*n*n
若將形參n用實(shí)參a+b替換,S(a+b)會(huì)變成a+b*a+b*a+b,顯然與原意不相符。如將宏定義改成:#defineS(n)(n)*(n)*(n)S(a+b)為(a+b)*(a+b)*(a+b),與原意相符。因此,在帶參的宏定義中,參數(shù)應(yīng)加括號(hào)來(lái)描述。(3)宏定義時(shí),在宏名與帶參數(shù)的括號(hào)之間不應(yīng)加空格,否則將空格以后的部分都作為宏體。例如:#defineS(n)(n)*(n)*(n)
S被認(rèn)為是不帶參數(shù)的宏名,它代表(n)(n)*(n)*(n)這樣的宏體。
(4)如在宏體中的參數(shù)前加上“#”,則在宏展開(kāi)后該實(shí)參前后會(huì)加上雙引號(hào),變成字符串。例9–2
利用帶參數(shù)的宏定義求圓的周長(zhǎng)和面積/*程序9-2,利用帶參數(shù)的宏定義求圓的周長(zhǎng)和面積*/#defineR1.0
#definePI3.14159
#defineC(r)2*PI*(r)#defineS(r)PI*(r)*(r)main(){printf(″周長(zhǎng)=%f,面積=%f\n″,C(R),S(R));}
上面程序宏展開(kāi)后如下:main(){printf(″周長(zhǎng)=%f,面積=%f\n″,2*3.14159*1.0,3.14159*1.0*1.0);}
帶參數(shù)的宏又稱為函數(shù)宏,函數(shù)宏不是函數(shù):
(1)函數(shù)調(diào)用要求形參和實(shí)參類型一致,如實(shí)參是表達(dá)式,必須先計(jì)算出值;宏名無(wú)類型,宏體也無(wú)類型,宏展開(kāi)只進(jìn)行參數(shù)的簡(jiǎn)單替換。
(2)函數(shù)調(diào)用是在程序運(yùn)行時(shí)處理,分配臨時(shí)的內(nèi)存單元,有返回值;而宏展開(kāi)是在編譯前進(jìn)行的,展開(kāi)時(shí)并不分配內(nèi)存單元,不進(jìn)行值的傳遞,沒(méi)有返回值的概念。
(3)調(diào)用函數(shù)得到一個(gè)返回值,而用宏則可以設(shè)法得到幾個(gè)值。
(4)宏展開(kāi)將使源程序變長(zhǎng),而函數(shù)調(diào)用不使源程序變長(zhǎng)
(5)宏替換不占運(yùn)行時(shí)間,只占編譯時(shí)間,而函數(shù)調(diào)用則占運(yùn)行時(shí)間(分配單元、保留現(xiàn)場(chǎng)、值傳遞、返回)。9.1.3預(yù)定義宏
預(yù)定義宏,由系統(tǒng)提供,宏名開(kāi)始和結(jié)尾均為下劃線。
-TURBOC-,當(dāng)前TURBOC的版本號(hào)。
-LINE-,程序行號(hào),第一行定義為1。
-FILE-,源程序文件名。
-DATE-,當(dāng)前編譯日期。
-TIME-,當(dāng)前編譯時(shí)間。9.1.4取消宏定義
形式:#undef宏名取消前面定義的宏名,使宏名局部化,取消以后不能再使用。9.2文件包含
文件包含是指一個(gè)C語(yǔ)言源程序中將另一個(gè)C語(yǔ)言源程序包含進(jìn)來(lái),通過(guò)include預(yù)處理指令實(shí)現(xiàn)。一般形式:#include″被包含文件名″
或#include<被包含文件名>
(1)被包含的文件一般指定為頭文件(*.h),也可為C程序等文件。
(2)一個(gè)include指令只能指定一個(gè)被包含文件,如果要包含n個(gè)文件,則要用到n條include指令。
(3)不能包含OBJ文件。文件包含是在編譯前進(jìn)行處理,不是在連接時(shí)進(jìn)行處理。(4)當(dāng)文件名用雙引號(hào)括起來(lái)時(shí),系統(tǒng)先在當(dāng)前目錄中尋找包含的文件,若找不到,再在系統(tǒng)指定的標(biāo)準(zhǔn)方式檢索其它目錄。而用尖括號(hào)時(shí),系統(tǒng)直接按指定的標(biāo)準(zhǔn)方式檢索。一般系統(tǒng)提供的頭文件,用尖括號(hào)。自定義的文件,用雙引號(hào)。
(5)被包含文件與當(dāng)前文件,在預(yù)編譯后變成同一個(gè)文件,而非兩個(gè)文件。
(6)文件包含可以嵌套,但必須按順序包含。9.3條件編譯1.
#ifdef標(biāo)識(shí)符程序段1
#else
程序段2
#endif
當(dāng)標(biāo)識(shí)符已經(jīng)被定義過(guò),則對(duì)程序段1進(jìn)行編譯,否則對(duì)程序段2進(jìn)行編譯。和if-else語(yǔ)句一樣,#else子句可以缺省,缺省后的形式為:#ifdef標(biāo)識(shí)符程序段1
#endif
另可增加#elif子句構(gòu)成嵌套。2.#ifndef標(biāo)識(shí)符
程序段1
#else
程序段2
#endif
與第一種形式正好相反,當(dāng)標(biāo)識(shí)符未被定義過(guò)時(shí),則對(duì)程序段1進(jìn)行編譯,否則,對(duì)程序段2進(jìn)行編譯。3.#if表達(dá)式程序段1
#else
程序段2
#endif
當(dāng)表達(dá)式之值為真(非零)時(shí),編譯程序段1,否則編譯程序段2。例如:#ifDEBUG==1
調(diào)試代碼#endif
例9—3
根據(jù)給定的條件編譯,使給定的字符串以小寫字母或大寫字母形式輸出。
/*程序9—3,條件編譯實(shí)例*/
#defineLETTER1
main()
{inti=0;
char*str=″HuNanComputer″;
charc;
while((c=str[i])!=′\0′)
{#ifLETTER
if(c>=′a′&&c<=′z′)
c-=32;#else
if(c>=′A′&&c<=′Z′)
c+=32;#endif;
printf(″c%″,c);}
}運(yùn)行結(jié)果:HUNANCOMPUTER
如將LETTER定義為0,將編譯另一條if語(yǔ)句,運(yùn)行結(jié)果將變?yōu)椋篽unancomputer。
例9—4
假設(shè)某程序使用與國(guó)別有關(guān)的信息,每個(gè)國(guó)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- Karrikinolide-3-ethyl-ester-生命科學(xué)試劑-MCE-7462
- Diammonium-phosphate-15N2-生命科學(xué)試劑-MCE-5147
- 1-3-Diheptadecanoyl-glycerol-生命科學(xué)試劑-MCE-9470
- 2025年度家居建材送貨司機(jī)合作協(xié)議書(shū)
- 二零二五年度綠色能源知識(shí)產(chǎn)權(quán)共享及資源利用合同
- 2025年度鋼筋加工企業(yè)節(jié)能減排合作協(xié)議
- 二零二五年度股權(quán)代持協(xié)議中的稅務(wù)影響與籌劃策略
- 2025年度藥店藥品質(zhì)量檢測(cè)員勞動(dòng)合同
- 2025年度養(yǎng)老產(chǎn)業(yè)股份轉(zhuǎn)讓協(xié)議書(shū)
- DB 3705T 50-2024設(shè)施蝴蝶蘭高效栽培技術(shù)規(guī)程
- 江蘇省蘇州市2024-2025學(xué)年高三上學(xué)期1月期末生物試題(有答案)
- 銷售與銷售目標(biāo)管理制度
- 特殊教育學(xué)校2024-2025學(xué)年度第二學(xué)期教學(xué)工作計(jì)劃
- 2025年第一次工地開(kāi)工會(huì)議主要議程開(kāi)工大吉模板
- 第16課抗日戰(zhàn)爭(zhēng)課件-人教版高中歷史必修一
- 對(duì)口升學(xué)語(yǔ)文模擬試卷(9)-江西省(解析版)
- 糖尿病高滲昏迷指南
- 【公開(kāi)課】同一直線上二力的合成+課件+2024-2025學(xué)年+人教版(2024)初中物理八年級(jí)下冊(cè)+
- 南京信息工程大學(xué)《教師領(lǐng)導(dǎo)力》2021-2022學(xué)年第一學(xué)期期末試卷
- 信息科技大單元教學(xué)設(shè)計(jì)之七年級(jí)第三單元便捷的互聯(lián)網(wǎng)服務(wù)
- 壁壘加筑未來(lái)可期:2024年短保面包行業(yè)白皮書(shū)
評(píng)論
0/150
提交評(píng)論