C語(yǔ)言程序設(shè)計(jì)實(shí)例教程課件9_第1頁(yè)
C語(yǔ)言程序設(shè)計(jì)實(shí)例教程課件9_第2頁(yè)
C語(yǔ)言程序設(shè)計(jì)實(shí)例教程課件9_第3頁(yè)
C語(yǔ)言程序設(shè)計(jì)實(shí)例教程課件9_第4頁(yè)
C語(yǔ)言程序設(shè)計(jì)實(shí)例教程課件9_第5頁(yè)
已閱讀5頁(yè),還剩10頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第9章 編譯預(yù)處理 在C語(yǔ)言中,編譯預(yù)處理指令是以“”開(kāi)始的行,其結(jié)尾不用分號(hào)“;”作結(jié)束符。 C語(yǔ)言提供的編譯預(yù)處理功能有3種,即宏定義、文件包含和條件編譯。9.1 宏定義9.2 文件包含 9.3 條件編譯 9.1 宏定義 C編譯系統(tǒng)的預(yù)編譯程序提供了宏定義機(jī)制,利用這種機(jī)制可以定義不帶參數(shù)的符號(hào)常量和帶參數(shù)的宏。 9.1.1 不帶參數(shù)的宏定義 1. 定義符號(hào)常量 符號(hào)常量用不帶參數(shù)的宏定義語(yǔ)句定義。不帶參數(shù)的宏定義,其一般格式為: define 宏名 字符串 該語(yǔ)句是把符號(hào)常量名定義為指定的字符串,將程序中出現(xiàn)宏名的地方均用該字符串來(lái)替換。 在進(jìn)行預(yù)編譯處理時(shí),用該字符串替代程序中出現(xiàn)的符

2、號(hào)常量名。例如 # define TRUE 1 在符號(hào)常量定義語(yǔ)句中,字符串可以是一個(gè)數(shù)值型數(shù)據(jù)、表達(dá)式或字符串。 如果字符串是一個(gè)運(yùn)算表達(dá)式時(shí),一般應(yīng)該用括號(hào)括住它,以便把它視為一個(gè)操作對(duì)象與其他操作數(shù)進(jìn)行運(yùn)算。例如: text = A*8 ; 預(yù)編譯后,該表達(dá)式變?yōu)椋?text = (20-(3*4)*8 ; 2. 使用符號(hào)常量的好處 (1) 增強(qiáng)程序的可讀性 (2) 增強(qiáng)程序的可維護(hù)性 3. 使用符號(hào)常量的注意事項(xiàng) (1) 符號(hào)常量名一般用大寫(xiě)字母(也可以用小寫(xiě)字母),以便與其他標(biāo)識(shí)符相區(qū)別。 (2) 宏定義語(yǔ)句不是C語(yǔ)言的語(yǔ)句,因此,不能用分號(hào)結(jié)尾。 (3) 替換字符串可以為空。 (4

3、) 宏定義語(yǔ)句應(yīng)放在函數(shù)定義之外,符號(hào)常量的有效范圍是從定義它的宏定義語(yǔ)句開(kāi)始至所在源文件的結(jié)尾。一般宏定義語(yǔ)句都放在源文件的開(kāi)頭,以便使它對(duì)整個(gè)源文件都有效。 (5) 為了靈活控制宏定義的作用范圍,可用 undef命令終止宏定義的作用域。 (6) 在定義符號(hào)常量時(shí),可以引用已定義的符號(hào)常量。 (7) 程序中,用雙括號(hào)括起來(lái)的字符串內(nèi),如果有字符時(shí),預(yù)編譯時(shí)并不進(jìn)行替換。 9.1.2 帶參數(shù)的宏定義 1. 定義帶參數(shù)的宏 帶參數(shù)的宏的一般定義格式為: define 宏名(參數(shù)表) 字符串 字符串中包含參數(shù)表中的參數(shù)。例如: # define min(a , b) (a)(b) ? (a) :

4、(b) 2. 使用帶參數(shù)的宏的好處 (1) 使程序更加簡(jiǎn)潔。 (2) 增強(qiáng)程序的可讀性。 3. 帶參數(shù)的宏與函數(shù)的區(qū)別 (1) 函數(shù)調(diào)用時(shí),要保留現(xiàn)場(chǎng)和返回點(diǎn),而后把控制轉(zhuǎn)移給被調(diào)用函數(shù)。當(dāng)被調(diào)用函數(shù)執(zhí)行結(jié)束后,又要恢復(fù)現(xiàn)場(chǎng)和把控制返回到調(diào)用函數(shù)。而對(duì)帶參數(shù)宏的使用不存在控制的來(lái)回轉(zhuǎn)移,它只是表達(dá)式的運(yùn)算。 (2) 函數(shù)有一定的數(shù)據(jù)類型,且數(shù)據(jù)類型是不變的。而帶參數(shù)的宏一般是一個(gè)運(yùn)算表達(dá)式,它沒(méi)有固定的數(shù)據(jù)類型,其數(shù)據(jù)類型就是表達(dá)式運(yùn)算結(jié)果的數(shù)據(jù)類型。 (3) 函數(shù)定義和調(diào)用中使用的形參和實(shí)參都受數(shù)據(jù)類型的限制,而帶參數(shù)宏的形參和實(shí)參可以是任意數(shù)據(jù)類型。 (4) 函數(shù)調(diào)用中存在參數(shù)的傳遞過(guò)程,

5、而帶參數(shù)宏的引用不存在參數(shù)傳遞過(guò)程。 (5) 使用函數(shù)可縮短程序占用的內(nèi)存空間,但由于控制的來(lái)回轉(zhuǎn)移,會(huì)使程序的執(zhí)行效率降低。而帶參數(shù)的宏則相反,多次使用宏會(huì)增加程序占用的存儲(chǔ)空間,但其執(zhí)行效率要比函數(shù)高。 4. 使用帶參數(shù)的宏時(shí)的注意事項(xiàng) (1) 對(duì)宏定義語(yǔ)句中的定義式和形式參數(shù),要根據(jù)需要加上圓括號(hào),以免發(fā)生運(yùn)算錯(cuò)誤。 (2) 在定義帶參數(shù)的宏時(shí),在宏名和帶參數(shù)的圓括號(hào)間不能有空格,否則,空格之后的字符串都將視為替代字符串。 9.2 文件包含 文件包含語(yǔ)句的一般格式為: include 文件名 或?yàn)椋?include 功能:將所指文件的全部?jī)?nèi)容包含在該# include語(yǔ)句所在的源文件中。

6、 在# include語(yǔ)句中: 當(dāng)文件名用括住時(shí),指示編譯系統(tǒng)按系統(tǒng)設(shè)定的標(biāo)準(zhǔn)目錄搜索文件; 當(dāng)文件名用 括住時(shí),表示按指定的路徑搜索; 若未指定路徑名時(shí),則在當(dāng)前目錄中搜索。 使用# include語(yǔ)句時(shí),應(yīng)注意以下兩點(diǎn): (1) 一個(gè)# include語(yǔ)句只能包含一個(gè)包含文件。如果需要包含n個(gè)文件時(shí),就需要使用n個(gè) # include語(yǔ)句。 (2) 文件包含可以嵌套。9.3 條件編譯 只對(duì)滿足一定條件的內(nèi)容進(jìn)行編譯,這就是條件編譯。 條件編譯指令有3種格式。 1. 由# ifdef # else # endif語(yǔ)句實(shí)現(xiàn) 用# ifdef # else # endif語(yǔ)句進(jìn)行條件編譯的指令格

7、式為: # ifdef 標(biāo)識(shí)符 程序段1 # else 程序段2 # endif 其作用是:如果標(biāo)識(shí)符已被定義(用# define定義),則對(duì)程序段1進(jìn)行編譯,而程序段2被刪除;否則,程序段1被刪除,編譯程序段2。 條件編譯語(yǔ)句中的# ifdef和# endif決定了編譯范圍,在此范圍外的源程序不存在條件編譯問(wèn)題。 2. 由# ifndef # else # endif語(yǔ)句實(shí)現(xiàn) 由# ifndef # else # endif語(yǔ)句進(jìn)行條件編譯的指令格式為: # ifndef 標(biāo)識(shí)符 程序段1 # else 程序段2 # endif 其作用是:如果標(biāo)識(shí)符未被定義過(guò),則對(duì)程序段1進(jìn)行編譯;否則編譯程序段2。 3. 由# if # else # endif語(yǔ)句實(shí)

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論