第8章 編譯預(yù)處理_第1頁
第8章 編譯預(yù)處理_第2頁
第8章 編譯預(yù)處理_第3頁
第8章 編譯預(yù)處理_第4頁
第8章 編譯預(yù)處理_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第第8章章 編譯預(yù)處理編譯預(yù)處理本章要點(diǎn):本章要點(diǎn): 無參宏定義無參宏定義 有參宏定義有參宏定義 文件包含文件包含學(xué)習(xí)方法建議:學(xué)習(xí)方法建議:學(xué)習(xí)本章內(nèi)容時(shí),應(yīng)重點(diǎn)掌握無參宏定義與帶參宏定學(xué)習(xí)本章內(nèi)容時(shí),應(yīng)重點(diǎn)掌握無參宏定義與帶參宏定義的使用,掌握文件包含的意義,了解條件編譯的作用。義的使用,掌握文件包含的意義,了解條件編譯的作用。1問題描述問題描述求最大值、最大值的平方、數(shù)值和的平方。求最大值、最大值的平方、數(shù)值和的平方。輸入輸入3個(gè)實(shí)數(shù),個(gè)實(shí)數(shù),求其中最大的實(shí)數(shù)。求其中最大的實(shí)數(shù)。求最大實(shí)數(shù)的平方。求最大實(shí)數(shù)的平方。求求3個(gè)實(shí)數(shù)和的平方。個(gè)實(shí)數(shù)和的平方。2引例分析引例分析任意輸入任意輸入3

2、個(gè)實(shí)數(shù),首先需要求出三個(gè)數(shù)中最大的實(shí)數(shù),當(dāng)最個(gè)實(shí)數(shù),首先需要求出三個(gè)數(shù)中最大的實(shí)數(shù),當(dāng)最大值求出后,就可以求出最大實(shí)數(shù)的平方,然后再求出大值求出后,就可以求出最大實(shí)數(shù)的平方,然后再求出3個(gè)實(shí)個(gè)實(shí)數(shù)和的平方,編寫程序?qū)崿F(xiàn)這些功能,可以通過函數(shù)實(shí)現(xiàn),數(shù)和的平方,編寫程序?qū)崿F(xiàn)這些功能,可以通過函數(shù)實(shí)現(xiàn),也可以使用預(yù)處理等多種方法實(shí)現(xiàn)。也可以使用預(yù)處理等多種方法實(shí)現(xiàn)。8.1 引例引例 3程序代碼程序代碼#includestdio.h#define MAX(a,b) (a)=(b)?(a):(b) /*定義有參宏,求兩個(gè)數(shù)中的最大數(shù)定義有參宏,求兩個(gè)數(shù)中的最大數(shù)*/#define SQR(a) (a)*

3、(a) /*定義有參宏,求一個(gè)數(shù)的平方定義有參宏,求一個(gè)數(shù)的平方*/main() int i; float x3,max,sq_max,sq_sum; printf(nPlease input three real numbers:); for(i=0;i (b) ? (a) : (b) main( ) int x,y,z; scanf(%d%d,&x,&y); z=MAX(x,y); printf(Max=%d,z); 8.3.1 文件包含處理命令的格式文件包含處理命令的格式文件包含一般形式為:文件包含一般形式為: #include 或或 #include 文件名文件名其功能

4、是用相應(yīng)文件中的全部?jī)?nèi)容來替換該預(yù)處理語句。其功能是用相應(yīng)文件中的全部?jī)?nèi)容來替換該預(yù)處理語句。8.3.2 文件包含的優(yōu)點(diǎn)文件包含的優(yōu)點(diǎn)一個(gè)大程序,通常分為多個(gè)模塊,并由多個(gè)程序員分別編程。一個(gè)大程序,通常分為多個(gè)模塊,并由多個(gè)程序員分別編程。有了文件包含處理功能,就可以將多個(gè)模塊共用的數(shù)據(jù)(如符有了文件包含處理功能,就可以將多個(gè)模塊共用的數(shù)據(jù)(如符號(hào)常量和數(shù)據(jù)結(jié)構(gòu))或函數(shù),集中到一個(gè)單獨(dú)的文件中。這樣,號(hào)常量和數(shù)據(jù)結(jié)構(gòu))或函數(shù),集中到一個(gè)單獨(dú)的文件中。這樣,凡是要使用其中數(shù)據(jù)或調(diào)用其中函數(shù)的程序員,只要使用文件凡是要使用其中數(shù)據(jù)或調(diào)用其中函數(shù)的程序員,只要使用文件包含處理功能,將所需文件包含進(jìn)

5、來即可,不必再重復(fù)定義它包含處理功能,將所需文件包含進(jìn)來即可,不必再重復(fù)定義它們,從而減少重復(fù)勞動(dòng)。們,從而減少重復(fù)勞動(dòng)。8.3 文件包含文件包含8.4.1 #ifdef命令命令一般形式為:一般形式為: #ifdef 標(biāo)識(shí)符標(biāo)識(shí)符 程序段程序段1 #else 程序段程序段2 #endif其作用是:如果標(biāo)識(shí)符已經(jīng)定義過(一般是指用其作用是:如果標(biāo)識(shí)符已經(jīng)定義過(一般是指用#define命令定義),那么,命令定義),那么,程序段程序段1參加編譯,否則,程序段參加編譯,否則,程序段2參加編譯。程序段參加編譯。程序段1和程序段和程序段2可以包含任意可以包含任意條語句。程序段條語句。程序段1或程序段或程

6、序段2即使由多條語句組成,也不需要用花括號(hào)括起來。即使由多條語句組成,也不需要用花括號(hào)括起來。其中其中#else部分可以省略,即:部分可以省略,即: #ifdef標(biāo)識(shí)符標(biāo)識(shí)符 程序段程序段 #endif作用是:如果標(biāo)識(shí)符已定義過,則程序段參加編譯,否則,程序段不參加編譯。作用是:如果標(biāo)識(shí)符已定義過,則程序段參加編譯,否則,程序段不參加編譯。 8.4 條件編譯條件編譯8.4.2 #ifndef命令命令#ifndef命令的用法與命令的用法與#ifdef命令的用法類似,其一般形式為:命令的用法類似,其一般形式為: #ifndef標(biāo)識(shí)符標(biāo)識(shí)符 程序段程序段1 #else 程序段程序段2 #endif其

7、作用是:當(dāng)標(biāo)識(shí)符沒有定義時(shí),編譯程序段其作用是:當(dāng)標(biāo)識(shí)符沒有定義時(shí),編譯程序段1,否則,編譯程序,否則,編譯程序段段2。其中。其中#else部分可以省略,即:部分可以省略,即: #ifndef 標(biāo)識(shí)符標(biāo)識(shí)符 程序段程序段 #endif作用是:當(dāng)標(biāo)識(shí)符沒有定義時(shí),程序段參加編譯,否則,程序段不作用是:當(dāng)標(biāo)識(shí)符沒有定義時(shí),程序段參加編譯,否則,程序段不參加編譯。參加編譯。8.4.3 #if 命令命令 #if預(yù)處理命令提供了按條件控制編譯過程的方法。其一般形式為:預(yù)處理命令提供了按條件控制編譯過程的方法。其一般形式為: #if 表達(dá)式表達(dá)式 程序段程序段1 #else 程序段程序段2 #endif它

8、的作用是:當(dāng)表達(dá)式為它的作用是:當(dāng)表達(dá)式為“真真”(值非(值非0)時(shí),程序段)時(shí),程序段1參加編譯,否則,程參加編譯,否則,程序段序段2參加編譯。其中的參加編譯。其中的#else部分可以省略。部分可以省略。8.4.4 #undef 命令命令#undef命令的一般形式如下所示:命令的一般形式如下所示: #undef標(biāo)識(shí)符標(biāo)識(shí)符它的作用是:將已經(jīng)定義的標(biāo)識(shí)符變?yōu)槲炊x的。它的作用是:將已經(jīng)定義的標(biāo)識(shí)符變?yōu)槲炊x的。 【例【例8.3】 交換兩個(gè)變量的值。交換兩個(gè)變量的值。#includestdio.h#define SWAP(x,y) int t;t=x;x=y; y=t;main() int a,

9、b,temp; printf(input a&b:); scanf(%d%d,&a,&b); printf(nBefore: a=%dtb=%d,a,b); #ifdef SWPA /*如果如果SWPA被定義被定義*/ SWAP(a,b); /*調(diào)用宏調(diào)用宏*/ #else temp=a;a=b;b=temp; #endif printf(nafter: a=%dtb=%d,a,b); 【例【例8.4】 輸入三個(gè)整數(shù),并利用宏定義求出其中的最小值。輸入三個(gè)整數(shù),并利用宏定義求出其中的最小值。 #include stdio.h #define MIN(x,y) (x) (

10、y) ? (x) : (y) main( ) int a,b,c,M; printf(Input a,b,c:); scanf(%d%d%d,&a,&b,&c); M=MIN(MIN(a,b),c); printf(Min=%d,M); 【例【例8.5】 從鍵盤輸入從鍵盤輸入10個(gè)整型數(shù)據(jù),將其中的最大值或最小值顯示出來。個(gè)整型數(shù)據(jù),將其中的最大值或最小值顯示出來。 #include stdio.h #define MFLAG 1 main( ) int i,M; int array10; for(i=0;i10;i+) scanf(%d,&arrayi); M

11、=array0; for(i=1;i10;i+) #if MFLAG if(Marrayi) M=arrayi; #endif if(MFLAG) printf(Max=%d,M); else printf(Min=%d,M); 上機(jī)實(shí)驗(yàn)上機(jī)實(shí)驗(yàn)1掌握宏定義與宏展開的應(yīng)用;掌握宏定義與宏展開的應(yīng)用; 2掌握文件包含的方法與應(yīng)用。掌握文件包含的方法與應(yīng)用。一、實(shí)驗(yàn)?zāi)康囊弧?shí)驗(yàn)?zāi)康?驗(yàn)證性實(shí)驗(yàn)驗(yàn)證性實(shí)驗(yàn)1)分析下面程序的輸出結(jié)果,然后上機(jī)驗(yàn)證。)分析下面程序的輸出結(jié)果,然后上機(jī)驗(yàn)證。#define EXCH( a, b ) int t; t=a ;a=b ; b=t ; #include stdi

12、o.hmain ( ) int x=5, y=9 ; EXCH (x , y); printf (x=%d ,y=%dn, x , y ); 二、實(shí)驗(yàn)內(nèi)容二、實(shí)驗(yàn)內(nèi)容2)下面程序用于計(jì)算兩個(gè)實(shí)數(shù)的平方及該兩個(gè)實(shí)數(shù)和的平方)下面程序用于計(jì)算兩個(gè)實(shí)數(shù)的平方及該兩個(gè)實(shí)數(shù)和的平方,請(qǐng)修,請(qǐng)修改程序中的錯(cuò)誤。使之得到正確的結(jié)果。例如:輸入的兩個(gè)數(shù)分別是改程序中的錯(cuò)誤。使之得到正確的結(jié)果。例如:輸入的兩個(gè)數(shù)分別是2和和3輸出應(yīng)該是:輸出應(yīng)該是:a=2.00 SQR(2.00)=4b=3.00 SQR(3.00)=9a+b=5.00 SQR(5.00)=25.00#include stdio.h#define SQR(a) a*a /*此處有錯(cuò)誤,請(qǐng)改正此處有錯(cuò)誤,請(qǐng)改正*/main() float a,b; printf(input a&b:); scanf(%f%f,&a,&b); printf(na=%.2ftSQR(%.2f)=%.2f,a,a,SQR(a); printf(nb=%.2ftSQR(%.2f)=%.2f,b,b,SQR(b); printf(na+b=%.2ftSQR(%.2f)=%.2f,a+b,a+b,SQR(a+b); 2設(shè)計(jì)性實(shí)驗(yàn)設(shè)計(jì)性實(shí)驗(yàn)1)三角形的面積為)三角形的面積

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論