版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
9第九章編譯預(yù)處理
2/4/20231◆宏定義
◆文件包含◆條件編譯
【編譯】C編譯系統(tǒng)對源程序進(jìn)行:詞法和語法分析,代碼生成,優(yōu)化→
.OBJ文件【編譯預(yù)處理】編譯前對源程序進(jìn)行一些預(yù)加工(改善程序設(shè)計(jì)環(huán)境/模塊化設(shè)計(jì))編譯預(yù)處理命令均以#開頭,未尾不加分號可出現(xiàn)在程序的任何位置,其作用范圍:出現(xiàn)點(diǎn)至所在源程序未尾。編譯預(yù)處理2/4/20232重慶工學(xué)院計(jì)算機(jī)科學(xué)與工程學(xué)院基礎(chǔ)系
預(yù)處理功能
C語言的預(yù)處理程序負(fù)責(zé)分析和處理以“#”為首字符的預(yù)處理控制行。預(yù)處理是在編譯前進(jìn)行的。預(yù)處理控制行主要有:宏替換、文件包含、條件編譯和行控制等。宏替換
define預(yù)處理命令不僅可以定義符號常量及字符串,而且也可以定義帶參數(shù)的宏。1.簡單的字符串替換一般形式
#define宏標(biāo)識符字符串通?!昂陿?biāo)識符”用大寫字母表示,用空格分開,末尾不帶“;”,以換行符結(jié)束。2/4/20233重慶工學(xué)院計(jì)算機(jī)科學(xué)與工程學(xué)院基礎(chǔ)系例如:#defineN10#defineTRUE-1#defineFALSE0#defineON1#defineOFF0#defineYES1#defineNO0#definePI3.14159#defineE2.7183#defineBLACK0#defineBLUE1#defineBEGIN{#defineEND}2/4/20234重慶工學(xué)院計(jì)算機(jī)科學(xué)與工程學(xué)院基礎(chǔ)系
使用宏替換可增加程序的可移植型。例如:在程序中定義顯示工作摸式為640*350,#defineXMAX639#defineYMAM349當(dāng)改為1024*1024時(shí),可定義如下:#defineXMAX1023#defineYMAX1023這就增加了圖形程序?qū)τ布h(huán)境的適應(yīng)性。2.帶參宏定義及宏調(diào)用
與函數(shù)可帶形式參數(shù)一樣,宏標(biāo)識符也可帶有參數(shù)。在程序中可用實(shí)參數(shù)替帶形式參數(shù),實(shí)現(xiàn)宏調(diào)用。2/4/20235重慶工學(xué)院計(jì)算機(jī)科學(xué)與工程學(xué)院基礎(chǔ)系宏定義的一般格式:
#define宏標(biāo)識符(形參數(shù)表)表達(dá)式宏調(diào)用的一般形式:
宏標(biāo)識符(實(shí)參數(shù)表)例如:#defineMAX(a,b)(a>b)?a:bmain(){
intx,y;x=10;y=20;
printf(”Themaximumdatais:%d”,MAX(x,y));}替換過程:
printf(”Themaximumdatais:%d”,(x>y)?x:y);2/4/20236重慶工學(xué)院計(jì)算機(jī)科學(xué)與工程學(xué)院基礎(chǔ)系1、宏定義格式
#define宏名宏體宏名和宏體均為字符串,前者必須符合標(biāo)識符命名規(guī)則。預(yù)處理時(shí)在程序中用宏體替換宏名。注意:可以用
#undef
宏名
終止該宏名的作用范圍。宏定義的撤消:#undef
宏標(biāo)識符2/4/20237重慶工學(xué)院計(jì)算機(jī)科學(xué)與工程學(xué)院基礎(chǔ)系①定義符號常量【例一】#defineM3#defineN(M+1)#defineNNN*N/2main(){
clrscr();
printf("NN=%d,",NN);printf("5*NN=%d\n",5*NN);}結(jié)果:NN=8,5*NN=40【討論】
如果第二行改為:
#defineNM+1
結(jié)果:
NN=6,5*NN=182/4/20238重慶工學(xué)院計(jì)算機(jī)科學(xué)與工程學(xué)院基礎(chǔ)系②帶參數(shù)的宏定義
格式
#define宏名(參數(shù)表)宏體【例二】#definePI3.14159#defines(r)PI*r*rmain(){floata=1,sum;sum=s(a);
printf("r=%.0f,s=%f\n",a,sum);}結(jié)果:r=1,s=3.1415902/4/20239重慶工學(xué)院計(jì)算機(jī)科學(xué)與工程學(xué)院基礎(chǔ)系②帶參數(shù)的宏定義
【例三】#definePT5.5#defines(A)PT*A*Amain(){
inta=1,b=2;printf("%4.1f\n",s(a+b));}結(jié)果:9.5【討論】注意s(a+b)不是函數(shù),它不做任何計(jì)算(如果是函數(shù),則s(a+b)為s(3),結(jié)果49.5)
s(a+b)=5.5×1+2×1+2=9.5
2/4/202310重慶工學(xué)院計(jì)算機(jī)科學(xué)與工程學(xué)院基礎(chǔ)系②帶參數(shù)的宏定義【例四】選擇正確答案#include"stdio.h"#defineSUM(y)1+ymain(){
intx=2;printf("%d\n",SUM(5)*x);}
A)10B)11C)12D)15結(jié)果:B2/4/202311重慶工學(xué)院計(jì)算機(jī)科學(xué)與工程學(xué)院基礎(chǔ)系2、文件包含#include<>標(biāo)準(zhǔn)方式只按標(biāo)準(zhǔn)方式(系統(tǒng)存放C庫函數(shù)頭文件所在目錄)查找所要包含的文件
對TC,默認(rèn)只在\tc\include目錄下查找#include““
先在源文件所在目錄找指定頭文件,若無再按標(biāo)準(zhǔn)方式找(更保險(xiǎn))功能:把給定的包含文件的內(nèi)容嵌入到一個(gè)源程序文件中。
#include”文件名“或:#include<文件名>2/4/202312重慶工學(xué)院計(jì)算機(jī)科學(xué)與工程學(xué)院基礎(chǔ)系#include”font.h”
A
font.h
B
A
B
file1.c
file1.c
包含文件示意圖
特別警示 文件包含不可以彼此互相包含,否則容易造成嵌套定義函數(shù),這是C語言不允許的。
2/4/202313重慶工學(xué)院計(jì)算機(jī)科學(xué)與工程學(xué)院基礎(chǔ)系
包含文件的存放地點(diǎn),由文件路徑和文件名指定,并放入雙引號或尖括號中。
系統(tǒng)約定的查找順序是:雙引號:源文件所在的當(dāng)前文件目錄系統(tǒng)指定的標(biāo)準(zhǔn)目錄尖括號:直接查找指定的標(biāo)準(zhǔn)目錄
Forexample:用戶在當(dāng)前目錄中定義有“font.h”文件,在編譯程序的系統(tǒng)標(biāo)準(zhǔn)目錄中也定義有一個(gè)同名“font.h”文件。當(dāng)用戶需要使用自己定義的“font.h”文件時(shí):應(yīng)使用:#include”font.h”!若使用:#include<font.h>將嵌入系統(tǒng)標(biāo)準(zhǔn)目錄中的“font.h”,而不是用戶自定義的頭文件。2/4/202314重慶工學(xué)院計(jì)算機(jī)科學(xué)與工程學(xué)院基礎(chǔ)系3、條件編譯根據(jù)條件決定是否編譯某一組語句。常用形式:①如果標(biāo)識符被定義過*
如果標(biāo)識符未被定義過
#ifdef
標(biāo)識符#ifndef
標(biāo)識符程序段1程序段1/*編譯此程序段*/#else#else
/*#else部分可省略*/
程序段2程序段2/*反之,編譯此程序段*/#endif
#endif
*此處指標(biāo)識符用#define等命令定義過。2/4/202315重慶工學(xué)院計(jì)算機(jī)科學(xué)與工程學(xué)院基礎(chǔ)系②#if表達(dá)式/*如果表達(dá)式為真*/
程序段1/*編譯程序段1*/#else
程序段2/否則*編譯程序段2*/#endif如果用:
if表達(dá)式程序段1else
程序段2亦可實(shí)現(xiàn)以上功能,但程序段1,2均要編譯。如果它們比較大,生成的exe文件就很大。3、條件編譯2/4/202316重慶工學(xué)院計(jì)算機(jī)科學(xué)與工程學(xué)院基礎(chǔ)系3、條件編譯【例一】#defineDEBUG0main(){
inta=10,b=20,c;
clrscr();c=a/b;#ifdefDEBUG
printf("a=%d,b=%d\n",a,b);#endif
printf("c=%d\n",c);}結(jié)果:a=10,b=20c=0【討論】
如果#defineDEBUG呢?結(jié)果不變
如果沒有#define行呢?
只輸出c=0
2/4/202317重慶工學(xué)院計(jì)算機(jī)科學(xué)與工程學(xué)院基礎(chǔ)系6、以下程序運(yùn)行結(jié)果是
。#defineSQR(x)x*xmain(){
inta=10,k=2,m=1;a/=SQR(k+m);
printf("%d\n",a);}23、條件編譯2/4/202318重慶工學(xué)院計(jì)算機(jī)科學(xué)與工程學(xué)院基礎(chǔ)系③
#ifndef
條件編譯一般形式:#ifndef
標(biāo)識符 /*如果表達(dá)式為真*/ 程序段1 /*編譯程序段1*/#else
程序段2 /否則*編譯程序段2*/#endif作用是,如果標(biāo)識符未被定義,則編譯程序段1,否則編譯程序段2。例如:3條件編譯2/4/202319重慶工學(xué)院計(jì)算機(jī)科學(xué)與工程學(xué)院基礎(chǔ)系
#defineUSA1main(){#ifdefUSA
printf(”currencyisdollar\n”);#else
printf(”currencyispound\n”);#ifndefFRANCE
printf(”franccan’tbeused\n”);#endif}運(yùn)行結(jié)果:currencyisdollarfranccan’tbeused2/4/202320重慶工學(xué)院計(jì)算機(jī)科學(xué)與工程學(xué)院基礎(chǔ)系
1.C語言的預(yù)處理功能是由預(yù)處理程序?qū)崿F(xiàn)的。預(yù)處理命令行都要以“#”開始,可以出現(xiàn)在源程
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《二道白河鎮(zhèn)大戲臺河景區(qū)游客滿意度提升對策研究》
- 《“三言”馮夢龍作品詈語研究》
- 新時(shí)代下的企業(yè)發(fā)展戰(zhàn)略思考
- 《我國全要素生產(chǎn)率的測度及制度影響效應(yīng)研究》
- 《不定時(shí)工作制下勞動(dòng)者休息權(quán)保障研究》
- 《小組工作介入感統(tǒng)失調(diào)兒童抗逆力提升的實(shí)務(wù)性研究》
- 數(shù)字音樂產(chǎn)業(yè)的商業(yè)模式創(chuàng)新研究
- 2024-2030年中國汽車改裝行業(yè)運(yùn)營模式及未來發(fā)展策略分析報(bào)告
- 2024-2030年中國水成膜泡沫滅火器產(chǎn)業(yè)市場未來發(fā)展趨勢及前景調(diào)研分析報(bào)告
- 2024-2030年中國氟化物陶瓷行業(yè)供需狀況發(fā)展戰(zhàn)略規(guī)劃分析報(bào)告
- Unit 6 Food Lesson 1(說課稿)-2024-2025學(xué)年人教精通版(2024)英語三年級上冊
- 第25課《周亞夫軍細(xì)柳》復(fù)習(xí)課教學(xué)設(shè)計(jì)+2024-2025學(xué)年統(tǒng)編版語文八年級上冊
- 2024年廣東省深圳市中考英語試題含解析
- 金蛇納瑞2025年公司年會(huì)通知模板
- 有限空間應(yīng)急預(yù)案演練方案及過程
- GB/T 16288-2024塑料制品的標(biāo)志
- 四年級英語上冊 【月考卷】第三次月考卷(Unit 5-Unit 6) (含答案)(人教PEP)
- 某某市“鄉(xiāng)村振興”行動(dòng)項(xiàng)目-可行性研究報(bào)告
- 中國航空協(xié)會(huì):2024低空經(jīng)濟(jì)場景白皮書
- 第七單元 條形統(tǒng)計(jì)圖 條形統(tǒng)計(jì)圖(一) (同步練習(xí))-2024-2025學(xué)年人教版數(shù)學(xué)四年級上冊
- 2024-2025學(xué)年初中化學(xué)九年級上冊(2024)魯教版(2024)教學(xué)設(shè)計(jì)合集
評論
0/150
提交評論