版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第8講編譯預(yù)處理第五章編譯預(yù)處理C提供的預(yù)處理功能主要有以下幾種:1.宏定義2.文件包含編譯預(yù)處理行均以“#”開(kāi)頭3.條件編譯5.1宏定義(帶有參數(shù)的宏定義、不帶參數(shù)的宏定義)5.1.1不帶參數(shù)的宏定義形式:#define標(biāo)識(shí)符字符串作用:用一個(gè)指定的標(biāo)識(shí)符來(lái)代表一個(gè)字符串[例]求圓的面積。(excare.c)說(shuō)明:1每條預(yù)處理指令必須獨(dú)占一行。如果串長(zhǎng)于一行,可在行尾用反斜線“\”續(xù)行。行末不必加分號(hào)。
如:#defineLONG_STRING“thisisaverylongstringthatis\usedasanexample.”2.使用宏名代替一個(gè)字符串,可以減少程序中重復(fù)書(shū)寫(xiě)某些字符串的工作量,簡(jiǎn)單不易出錯(cuò)。當(dāng)需要改變時(shí),可以只改變#define命令行,可以提高程序的可移植性。3.#define命令出現(xiàn)在程序中函數(shù)的外面,宏名的有效范圍為定義命令之后到本源文件結(jié)束,可以用#undef命令結(jié)束宏定義的作用域#defineMAX100main(){printf("MAX=%d\n",MAX);#defineSTRLENMAX+1
printf("STRLEN=%d\n",STRLEN);#undefMAX#defineMAX200printf("NEWMAX=%d\n",MAX);printf("STRLEN=%d\n",STRLEN);}5.1.2帶參數(shù)的宏定義格式:#define宏名(參數(shù)表)字符串作用:按#define命令行中指定的字符串從左到右進(jìn)行置換,不僅進(jìn)行簡(jiǎn)單的字符串替換,還要進(jìn)行參數(shù)替換。說(shuō)明:1.宏定義是用宏名代替一個(gè)字符串,只作簡(jiǎn)單的置換,不作語(yǔ)法檢查。[例]extemp.c(預(yù)期結(jié)果48,實(shí)際結(jié)果34)2.在宏定義時(shí),宏名與帶參數(shù)的括弧之間不應(yīng)加空格,否則將空格以后的字符都作為替代字符串的一部分。
#defineS(r)PI*r*r則認(rèn)為符號(hào)常量S代表字符串“(r)PI*r*r”3.函數(shù)與帶參數(shù)的宏定義的主要區(qū)別:(1)函數(shù)調(diào)用時(shí),先求出實(shí)參表達(dá)式的值,然后代入形參。而使用帶參數(shù)的宏只是進(jìn)行簡(jiǎn)單的字符替換。(2)函數(shù)調(diào)用是在程序運(yùn)行時(shí)處理的,分配臨時(shí)的內(nèi)存單元。而宏展開(kāi)是在編譯時(shí)進(jìn)行的,在展開(kāi)時(shí)并不分配內(nèi)存單元,不進(jìn)行值的傳遞功能,也沒(méi)有“返回值”的概念。(3)對(duì)函數(shù)中的實(shí)參和形參都要定義類(lèi)型,二者的類(lèi)型要求一致。而宏不存在類(lèi)型的問(wèn)題,宏名無(wú)類(lèi)型,它的參數(shù)也無(wú)類(lèi)型。宏定義時(shí),字符串可以是任何類(lèi)型的數(shù)據(jù)。(4)調(diào)用函數(shù)只可得到一個(gè)返回值,而用宏可以設(shè)法得到幾個(gè)結(jié)果5.2文件包含處理
所謂“文件包含”處理是指一個(gè)源文件可以將另一個(gè)源文件的全部?jī)?nèi)容包含進(jìn)來(lái),即將另外的文件包含到本文件中。通常可以把經(jīng)常要使用的帶公用性的一批符號(hào)常數(shù)和帶參數(shù)的宏定義行集中起來(lái),做成一個(gè)文件,然后再用文件包含將它們包含到需要的文件中來(lái)。形式:#include“文件名”可包含的文件有:系統(tǒng)的文件、用戶自己的頭文件、用戶原文件。說(shuō)明:1.一個(gè)include命令只能指定一個(gè)被包含文件,如果要包含m個(gè)文件,則要用m個(gè)include命令。2.如果文件1包含文件2,而文件2中要用到文件3的內(nèi)容,則可在文件1中用兩個(gè)include命令分別包含文件2和文件3,而且文件3應(yīng)出現(xiàn)在文件2之前。這樣,file1和file2都可以用file3的內(nèi)容,在file2中不必再用#include“file3.h”了。
3.文件包含是可以嵌套的。如下圖所示:
file1.cfile2.hfile3.h#include“file2.h”…...#include“file3.h”…...不含#include命令…...4.在#include命令中,文件名可以用雙引號(hào)或尖括號(hào)括起來(lái)例:#include“file1.h”或#include<file2.h>區(qū)別為:對(duì)于前者,系統(tǒng)先在當(dāng)前目錄中尋找要包含的文件,若找不到,再按系統(tǒng)指定的標(biāo)準(zhǔn)方式檢索其它目錄。而對(duì)于后者,直接按系統(tǒng)標(biāo)準(zhǔn)方式檢索文件目錄,不檢查源文件file1.c所在的文件目錄。5.3條件編譯一般情況下,源程序中所有行都要參加編譯。但有時(shí)希望有選擇地編譯程序的不同部分,這就是條件編譯。C語(yǔ)言提供的條件編譯能力,它能使同一個(gè)源程序在不同的編譯條件下,產(chǎn)生出不同的目標(biāo)代碼文件。形式1:#ifdef
標(biāo)識(shí)符程序段1#else
程序段2#endif作用:當(dāng)標(biāo)識(shí)符已經(jīng)被定義過(guò)(一般是用#define命令定義),則對(duì)程序段1進(jìn)行編譯,否則編譯程序段2。其中#else部分可以沒(méi)有,即:
#ifdef
標(biāo)識(shí)符程序段1#endif[例]exifdef.c形式2:#ifndef
標(biāo)識(shí)符程序段1#else
程序段2#endif作用:當(dāng)標(biāo)識(shí)符未被定義過(guò)時(shí),則對(duì)程序段1進(jìn)行編譯,否則編譯程序段2。[例]exifndef.c形式3:#if表達(dá)式程序段1
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 小學(xué)動(dòng)手能力模擬試卷
- 小學(xué)氣象知識(shí)模擬試卷
- 小學(xué)練習(xí)模擬試卷一
- 高中英語(yǔ)模擬試卷閱讀理解與寫(xiě)作
- 繪畫(huà)天才:畫(huà)出你理想中的未來(lái)城市
- 小學(xué)生活的精彩瞬間
- 強(qiáng)化模擬考試模擬練習(xí)冊(cè)
- 小學(xué)英語(yǔ)月考題
- 小學(xué)升學(xué)縣測(cè)測(cè)試模擬
- 木工機(jī)床安全 寬帶砂光機(jī)和表面處理機(jī) 征求意見(jiàn)稿
- 深靜脈血栓管理制度
- 根據(jù)句子意思和首字母提示補(bǔ)全單詞
- 俄語(yǔ)入門(mén)(課堂PPT)
- (完整版)NAIT-布魯姆教育目標(biāo)分類(lèi)學(xué)(整理)
- 說(shuō)明方法練習(xí)
- 裂解液配制方法
- 最新投標(biāo)書(shū)密封條
- ASME-PTC29-1980(R1985)-水輪發(fā)電機(jī)組調(diào)速系統(tǒng)試驗(yàn)規(guī)程(譯文)
- 水泥混凝土路面監(jiān)理實(shí)施細(xì)則
- Sentaurus在ESD防護(hù)器件設(shè)計(jì)中的應(yīng)用PPT課件
- 脫硫系統(tǒng)運(yùn)行操作手冊(cè).docx
評(píng)論
0/150
提交評(píng)論