第8講 編譯預(yù)處理_第1頁(yè)
第8講 編譯預(yù)處理_第2頁(yè)
第8講 編譯預(yù)處理_第3頁(yè)
第8講 編譯預(yù)處理_第4頁(yè)
第8講 編譯預(yù)處理_第5頁(yè)
已閱讀5頁(yè),還剩4頁(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)介

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

評(píng)論

0/150

提交評(píng)論