版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025屆云南省臨滄市臨翔區(qū)元江民族中學(xué)物理高二第一學(xué)期期中綜合測(cè)試試題含解析
- 2025屆河南省偃師市高級(jí)中學(xué)培優(yōu)部物理高一上期中經(jīng)典試題含解析
- 江蘇常熟市張橋中學(xué)2025屆物理高二第一學(xué)期期中綜合測(cè)試試題含解析
- 2025屆江西省安福二中、吉安縣三中高三上物理期中綜合測(cè)試試題含解析
- 北京市西城區(qū)第一五六中學(xué)2025屆物理高三第一學(xué)期期末復(fù)習(xí)檢測(cè)模擬試題含解析
- 【8物(RJ)期中】滁州市明光市2024-2025學(xué)年八年級(jí)上學(xué)期期中物理試題
- 《篇長(zhǎng)期融資決策》課件
- 2024企業(yè)員工內(nèi)部培訓(xùn)合同
- 2024個(gè)人房買(mǎi)賣(mài)合同范本
- 急性腦出血預(yù)防及處理護(hù)理課件
- 道路水穩(wěn)層施工方案(完整版)
- 匹茲堡睡眠質(zhì)量指數(shù)(psqi)表格
- 5、火災(zāi)事故桌面演練記錄表
- 《甲基化與腫瘤》PPT課件.ppt
- 中國(guó)電信渠道管理工作指導(dǎo)意見(jiàn)
- 海水比重與鹽度換算表
- 行政法對(duì)憲法實(shí)施的作用探討
- BIM等信息技術(shù)的使用
- 西方發(fā)愿文是一篇圓滿的作品它包括了初中后三階段最
- 檁條規(guī)格選用表
- 圖形推理100道(附答案)
評(píng)論
0/150
提交評(píng)論