C語(yǔ)言程序設(shè)計(jì)教學(xué)課件:第8章 編譯預(yù)處理_第1頁(yè)
C語(yǔ)言程序設(shè)計(jì)教學(xué)課件:第8章 編譯預(yù)處理_第2頁(yè)
C語(yǔ)言程序設(shè)計(jì)教學(xué)課件:第8章 編譯預(yù)處理_第3頁(yè)
C語(yǔ)言程序設(shè)計(jì)教學(xué)課件:第8章 編譯預(yù)處理_第4頁(yè)
C語(yǔ)言程序設(shè)計(jì)教學(xué)課件:第8章 編譯預(yù)處理_第5頁(yè)
已閱讀5頁(yè),還剩19頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第八章大連理工大學(xué)編 譯 預(yù) 處 理本章主要內(nèi)容1.掌握無(wú)參宏定義和帶參宏定義的方法2.掌握文件包含命令的形式和文件包含的實(shí)現(xiàn)過程3.了解條件編譯命令 C的源程序 預(yù)處理 編譯 目標(biāo)程序 (*.C) _ (*.OBJ)編譯系統(tǒng)中有 : 預(yù)處理程序 編譯程序宏替換 #define N 20 文件包含 #include條件編譯 # ifdef( . ) C中的預(yù)處理命令分類宏定義有兩種類型:字符串替換和帶參數(shù)的宏替換 1 字符串宏替換 功能:在預(yù)處理時(shí) ,將程序中宏定義之后出現(xiàn)的所有的宏名,用宏替換體代替。宏替換名宏替換體例如:#define PI 3.14159 格式:#define 標(biāo)識(shí)符字符

2、串 C的編譯程序調(diào)用預(yù)處理程序檢查有否宏名,若有,用宏替換體將其替換,完成之后,將替換后的源程序交該編譯程序。8.1 宏定義 用途: 常用的符號(hào)常數(shù) PI=3.14159 自然對(duì)數(shù)的底:2.71828 數(shù)組的長(zhǎng)度 #define N 10 /* 編譯之前用10替換所有的N */.int aN 說明: 通常放在程序開頭,不加分號(hào) 是替代,不是賦值(不作語(yǔ)法檢查) 可將多個(gè)語(yǔ)句或表達(dá)式定義為一個(gè)宏替換 區(qū)別變量和關(guān)鍵字,習(xí)慣用大寫#define R 3.0#define PI 3.145926#define L 2.0*PI*R#define S PI*R*R 雙引號(hào)中的不替換 有效范圍,從定義開

3、始到程序結(jié)尾例: #define PI 3.14159main( ) printf (“PI=%fn”,PI); 結(jié)果:PI=3.14159main( ) printf(“PI=%sn”,”PI”); 可以嵌套,后定義的宏可以包含先定義的宏名結(jié)果:PI=PI#define BOOK “The red and black”main( ) printf(“%s”,BOOK); 運(yùn)行結(jié)果:The red and black#define BOOK “The red and black”main( ) printf(“%s”, “BOOK”); 運(yùn)行結(jié)果:BOOK2 帶參數(shù)的宏定義 帶參數(shù)的宏不僅能進(jìn)

4、行字符串代替,而且還進(jìn)行參數(shù)代換。 格式: #define 宏名(參數(shù)表) 表達(dá)式 功能: 帶參數(shù)的宏將一個(gè)帶形參的表達(dá)式定義為一個(gè)帶參數(shù)的宏名,預(yù)處理程序?qū)Τ绦蛑兴袔?shí)參表的宏名進(jìn)行宏展開替換,用表達(dá)式代替宏名,用參數(shù)表中的實(shí)參代替表達(dá)式中對(duì)應(yīng) 的形參。例:#define S( a, b) a*b程序中 S(3, 2) 3*2例:使用有參宏替換求園的面積。 #define PI 3.1415926 #define S(r) PI*r*r main() float a=3.6, area; area=S(a); area=S(a+5); printf(“r=%fnarea=%fn”,a,ar

5、ea); #define s (r) PI*r*r例:使用有參宏替換求園的面積。 #define PI 3.1415926 #define S(r) PI*(r)*(r) main() float a=3.6,b=5.2,area; area=S(a+b); printf(“r=%fnarea=%fn”,a+b,area); #define PR printf#define D “ %dn ”#define F “ %fn ”main()int a=10; float b=2.5; PR(D ,a); printf(“%dn”, a); PR(F ,b); printf(“%fn”, b);

6、用途:用帶參數(shù)的宏可以代表一些簡(jiǎn)短的表達(dá)式,提高程序執(zhí)行的效率。* 宏定義可以嵌套* 對(duì)常用的格式輸入輸出函數(shù)printf可以進(jìn)行宏定義,使程序簡(jiǎn)化*宏名與參數(shù)的圓括號(hào)之間不能有空格 s (a,b) 說明:* 宏定義命令要求在一行內(nèi)寫完,如換行,用“”表示下一行繼續(xù)。* 對(duì)于宏定義的形參要根據(jù)需要加上圓括號(hào),以免 發(fā)生運(yùn)算錯(cuò)誤函數(shù)要求形參,實(shí)參有類型(相同) 宏的形參,實(shí)參不要求類型,僅是符號(hào)函數(shù)需事先計(jì)算實(shí)參表達(dá)式的值,再代入形參宏展開中不求表達(dá)式的值,僅替換, 沒有值傳遞函數(shù)是在運(yùn)行時(shí)處理宏是在編譯之前進(jìn)行帶參數(shù)的宏與函數(shù)的區(qū)別函數(shù)調(diào)用影響運(yùn)行時(shí)間,源程序無(wú)變化宏展開影響編譯時(shí)間,通常使源

7、程序加長(zhǎng)函數(shù)調(diào)用有一個(gè)返回值 宏可以有多個(gè)結(jié)果#define area (r) a=PI*r*r; s=2*PI*r;main( ) float a,s,r=2.5; area ( r) .main() float a,s,r=2.5;a=PI*r*r;s=2*PI*r;.例:求最大值。(答案中用U代表空格)#include #define _A_main() float a,b,c,d; scanf(%f%f, _B_ ); c=MAX(a,b); d=MAX(3+a,4*b); printf(c=%f,d=%f.n,c,d);A: MAX(x,y)Uxy?x:yB: &a,&b 文件包含是

8、指一個(gè)程序文件將另一個(gè)指定文件的全部?jī)?nèi)容包含進(jìn)來(lái)。 格式: #include 或: #include “文件名”8.2 文件包含 功能: 用指定文件的全部?jī)?nèi)容代換該預(yù)處理行 ,C程序通過#include預(yù)處理,把一個(gè)指定的文件的內(nèi)容嵌入。只能包含ASCII文本文件。 與“ ”的區(qū)別: 在標(biāo)準(zhǔn)目錄下找指定文件 “ ” 在用戶當(dāng)前目錄下找指定文件,如用戶當(dāng)前目錄下沒有,再到標(biāo)準(zhǔn)目錄下找。 說明 “文件包含”示意圖 file1.c file2.c file1.c 包含#include”file2.c” B A B A (a) (b) (c) 只包含源文件,不包含可執(zhí)行文件和目標(biāo)文件。 可以嵌套例如:

9、file1.c需包含file2.h,file2.h包含file3.c,在file1.c中,用兩次:#include #include,必須將file3.h放在前面 一個(gè)#include只能包含一個(gè)文件用途 將符號(hào)常量 , 帶參數(shù)的宏及構(gòu)造類型的變量等定義在一個(gè)獨(dú)立的文件中,為其他文件共享。 程序員可將工作中積累的有價(jià)值的符號(hào),帶參數(shù)的宏定義,或一些外部變量,通用的子程序定義成一個(gè)文件,需要時(shí),包含進(jìn)源程序。 使用C中的庫(kù)函數(shù),需將所在的頭文件包含進(jìn)源程序。8.3 條件編譯8.3.1 條件編譯命令的形式 常用的有三種形式: 形式一: #ifdef 宏名 程序段1; #else 程序段2; #en

10、dif 或者:#ifdef 宏名 程序段;#endif 形式二: #ifndef 宏名 程序段1; #else 程序段2; #endif其中,# ifndef語(yǔ)句的功能與# ifdef相反,如果宏名未定義則編譯程序段1,否則編譯程序2。 或者:#ifndef 宏名 程序段;#endif形式三: #if 常數(shù)表達(dá)式 程序段1; #else 程序段2; #endif 功能:首先計(jì)算“常數(shù)表達(dá)式”的值,如果為真(非零),就編譯“程序段1”,否則編譯“程序段2”。如果沒有#else部分,則當(dāng)“常數(shù)表達(dá)式”的值為0時(shí),直接跳過#endif?;蛘撸?if 常數(shù)表達(dá)式 程序段;#endif例:閱讀程序。#include main() #if NULL printf(NULL is non-zer

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論