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

第10章

編譯預(yù)處理-2-★宏定義★文件包含★條件編譯

本章教學(xué)內(nèi)容本章教學(xué)目標(biāo)

★掌握帶參與不帶參宏定義的使用★掌握文件包含的使用★了解條件編譯-3-10.1宏定義

在C語(yǔ)言中所有的預(yù)處理命令都以”#”開頭,宏定義是預(yù)處理指令的一種,以#define開頭。在C語(yǔ)言源程序中允許用一個(gè)標(biāo)識(shí)符來(lái)表示一個(gè)字符串,稱為“宏”。被定義為“宏”的標(biāo)識(shí)符稱為“宏名”。在預(yù)處理過(guò)程中,宏調(diào)用會(huì)被展開為對(duì)應(yīng)的字符串,這個(gè)過(guò)程稱為“宏代換”或“宏展開”。

宏的使用有很多好處,不僅可以簡(jiǎn)化程序的書寫,而且便于程序的修改和移植,使用宏名來(lái)代替一個(gè)字符串,可以減少程序中重復(fù)書寫某些字符串的工作量。

根據(jù)宏定義中是否有參數(shù),可以將宏分為不帶參數(shù)的宏定義與帶參數(shù)的宏定義兩種,下面分別討論這兩種宏的定義與調(diào)用。-4-10.1.1不帶參數(shù)的宏定義

不帶參數(shù)的宏的宏名后面沒(méi)有參數(shù),不帶參數(shù)的宏定義又稱簡(jiǎn)單宏定義。其定義的一般形式為:#define宏名

字符串

其中,“#”表示預(yù)處理命令。define是關(guān)鍵字,表示該命令為宏定義。為了與一般的普通變量相區(qū)別,宏名一般使用大寫?!白址币话銥槌A?、表達(dá)式或字符串。

在進(jìn)行預(yù)處理時(shí),系統(tǒng)會(huì)將程序中的“宏名”用“字符串”來(lái)替換。-5-10.1.1不帶參數(shù)的宏定義【例10-1】不帶參數(shù)的宏定義的例子。

#include<stdio.h>#defineM(a*a+4*a)intmain(){inta,b;scanf("%d",&a);b=M*M+3*M+5;printf("b=%d\n",b);return0;}-6-帶參數(shù)的宏定義

在C語(yǔ)言中,宏定義可以不帶參數(shù),也可以帶參數(shù)。

在宏定義中的參數(shù)稱為形式參數(shù),在宏調(diào)用中的參數(shù)稱為實(shí)際參數(shù)。

帶參數(shù)宏定義的一般形式為:

#define宏名(形參表)字符串帶參數(shù)宏調(diào)用的一般形式為:

宏名(實(shí)參表);帶參數(shù)的宏調(diào)用時(shí),不僅簡(jiǎn)單地用字符串代替宏名,而且要用實(shí)參代換對(duì)應(yīng)的形參。例如:

#defineM(x)5*x+x*x/*宏定義*/f=M(8);/*宏調(diào)用*/在宏調(diào)用時(shí),用實(shí)參8去代替形參x,經(jīng)過(guò)預(yù)處理宏展開后f=5*8+8*8。-7-帶參數(shù)的宏定義(續(xù))【例10-2】帶參數(shù)的宏定義舉例。#include<stdio.h>#defineM(x,y,z)x*y+zintmain(){inta=1,b=2,c=3;printf(“%d\n”,M(a+b,b+c,c+a));return0;}-8-帶參數(shù)的宏定義(續(xù))

【例10-3】用宏來(lái)定義多個(gè)語(yǔ)句的例子。

#include<stdio.h>#defineM(x,y,z)x=a*m;y=a*n;z=a*hintmain(){inta,m,n,h,q1,q2,q3;a=5,m=8,n=7,h=10;M(q1,q2,q3);printf(“q1=%d\nq2=%d\nq3=%d\n”,q1,q2,q3);return0;}-9-10.2文件包含

在C語(yǔ)言中文件包含是指一個(gè)源文件可以將另一個(gè)源文件的全部?jī)?nèi)容包含進(jìn)來(lái)。編譯預(yù)處理程序把#include命令行中所指定的源文件的全部?jī)?nèi)容放到源程序的#include命令行所在的位置。文件包含的一般形式為:

#include<文件名>或

#include“文件名”-10-10.2文件包含【例10-5】將宏定義放在頭文件head.h中,使用文件包含命令將它包含在一個(gè)程序中。/*文件head.h*/#defineMAX(a,b)((a)>(b)?(a):(b))/*example10-5.c*/#include<stdio.h>#include“head.h”intmain(){intx,y,max;printf(“pleaseinputtwonumbers:”);scanf(“%d,%d”,&x,&y);max=MAX(x,y);printf(“max=%d\n”,max);return0;}-11-10.3條件編譯

條件編譯是C語(yǔ)言三種編譯預(yù)處理命令之一。一般情況下,源程序中的所有行均參加編譯,但有時(shí)希望部分行在滿足一定條件時(shí)才進(jìn)行編譯,即按不同的條件去編譯不同的程序部分,從而產(chǎn)生不同的目標(biāo)代碼文件,這就稱為“條件編譯”。條件編譯有以下幾種形式:

(1)#ifdef命令條件編譯命令#ifdef的一般形式為:#ifdef標(biāo)識(shí)符程序代碼1[#else程序代碼2]#endif-12-【例題10-6】#ifdef形式的條件編譯。

#include<stdio.h>#definePRICE8intmain(){#ifdefPRICEprintf(“PRICEis%d\n”,PRICE);#elseprintf(“PRICEisnotfound!\n”);#endifreturn0;}(2)#ifndef命令條件編譯命令#ifndef的一般形式為:

#ifndef標(biāo)識(shí)符程序代碼1#else程序代碼2#endif-13-10.3條件編譯(續(xù))

【例10-7】#ifndef形式的條件編譯。#include<stdio.h>#definePRICE8intmain(){#ifndefPRICEprintf(“PRICEis%d\n”,PRICE);#elseprintf(“PRICEisnotfound!\n”);#endifreturn0;}10.3條件編譯(續(xù))

(3)#if命令條件編譯命令#if的一般形式為:

#if表達(dá)式程序代碼1[#else程序代碼2]#endif功能:若表達(dá)式的值為真(非0),則對(duì)程序代碼1進(jìn)行編譯,否則對(duì)程序代碼2進(jìn)行編譯。-14-10.3條件編譯(續(xù))【例題10-8】#if形式的條件編譯。

#include<stdio.h>#defineR1intmain(){floatcr,s;printf(“pleaseenteranumber:”);scanf(“%f”,&c);#ifRr=3.14159*c*c;printf(“areaofroundis:%f\n”,r);#else-15-

s=c*c;printf(“areaofsquareis:%f\n”,s);#endifreturn0;}本章小結(jié)

編譯預(yù)處理是指在對(duì)源程序進(jìn)行編譯之前,首先對(duì)源程序中的編譯預(yù)處理命令進(jìn)行處理。C語(yǔ)言中所有的預(yù)處理命令都以“#”開頭,末尾不能加分號(hào)。所有的預(yù)處理命令都在編譯前處理,因此它不具有任何計(jì)算、操作等功能。若預(yù)處理命令有變化,則必須對(duì)程序重新進(jìn)行編譯和鏈接。C語(yǔ)言提供的編譯預(yù)處理命令主要有宏定義、文件包含和條件編譯3種。

宏定義是用一個(gè)標(biāo)識(shí)符來(lái)表示一個(gè)字符串,這個(gè)字符串可以是常量、變量或表達(dá)式。在宏替換時(shí),用該字符串代換宏名。根據(jù)宏定義中是否有參數(shù),可以將宏分為不帶參數(shù)的宏定義與帶參數(shù)的宏定義兩種。在寫帶有參數(shù)的宏定義時(shí),宏名與帶括號(hào)參數(shù)間不能有空格,否則將空格以后的字符都作為了替換字符串的一部分,這樣就變成不帶參數(shù)的宏定義了。不要把帶參數(shù)的宏定義與帶參數(shù)的函數(shù)混淆,帶參的宏定義在預(yù)處理時(shí)只是字符串的替換,而帶參的函數(shù)卻是將實(shí)參的值一一對(duì)應(yīng)的傳遞給形參。

文件包含是指一個(gè)源文件可以將另一個(gè)源文件的

溫馨提示

  • 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)論