cha編譯預(yù)處理與多文件工程程序_第1頁
cha編譯預(yù)處理與多文件工程程序_第2頁
cha編譯預(yù)處理與多文件工程程序_第3頁
cha編譯預(yù)處理與多文件工程程序_第4頁
cha編譯預(yù)處理與多文件工程程序_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

高級語言程序設(shè)計南京郵電大學計算機學院計算機軟件教學中心高級語言程序設(shè)計第09章編譯預(yù)處理與多文件工程程序內(nèi)容提要編譯預(yù)處理的概念多文件工程程序的組織方式模塊化程序設(shè)計的基本方法39.1編譯預(yù)處理編譯預(yù)處理(Preprocessor)編譯器根據(jù)源程序中的編譯預(yù)處理指令對源程序文本進行相應(yīng)操作的過程編譯預(yù)處理指令都以“#”開頭它不是C語言語句,結(jié)尾不帶“;”號三種編譯預(yù)處理指令文件包含(Includingfiles)宏定義(MacroDefinition)條件編譯(ConditionalCompilation)4文件包含頭文件(HeaderFile)主要的作用是保存程序的聲明,包括:功能函數(shù)原型、數(shù)據(jù)類型的聲明等,如:stdio.h、math.h、string.h等。文件包含指令的一般格式為:#include<頭文件名>到編譯系統(tǒng)指定的標準目錄(\include)下去查找該頭文件,若沒有找到就報錯。多用于包含標準頭文件。

#include"頭文件名“首先到當前工作目錄中查找頭文件;若沒找到,再到查找編譯系統(tǒng)指定的標準目錄中查找。多用于包含用戶自定義的頭文件。5宏定義宏定義將一個標識符定義為一個字符串。在編譯預(yù)處理時,源程序中的該標識符均以指定的字符串來代替。宏定義也稱為宏替換。宏定義指令分為:無參宏指令帶參宏指令6宏定義無參宏指令#define<標識符><字符串>例9.1無參宏指令應(yīng)用示例7#definePI3.14159

/*無參宏定義1,符號常量*/#defineISPOSITIVE>0

/*無參宏定義2*/#defineFORMAT "Area=%f\n" /*無參宏定義3*/#defineERRMSG"Inputerror!\n" /*無參宏定義4*/…思考題:若在本例宏定義命令的后面都加上“;”號,程序是否還能正確編譯?宏定義帶參宏指令#define<標識符>(<參數(shù)列表>)例9.2 帶參宏指令應(yīng)用示例8#defineSUB(a,b)a-b /*帶參宏定義*/…c=SUB(a,b); /*替換為:c=a-b;*/…c=SUB(3,1+2); /*替換為:c=3-1+2;結(jié)果不為0*/思考題:如何修改本例宏定義使得SUB(3,1+2)的結(jié)果為0?宏定義取消宏定義指令#undef<標識符>例如:#undefPI表示取消標識符PI的宏定義9條件編譯條件編譯指令格式1:#ifdef<標識符>

<程序段1>

[#else

<程序段2>]#endif例9.3 條件編譯指令應(yīng)用示例用于程序的調(diào)試信息的輸出10條件編譯條件編譯指令格式2:#ifndef<標識符>

<程序段1>

[#else

<程序段2>]#endif可以用來防止頭文件的重復(fù)包含具體下面9.2節(jié)介紹119.2多文件工程程序多文件工程程序(ProjectwithMultipleSourceFiles)程序代碼按一定的分類原則被劃分為若干個部分,也稱為模塊(Module)優(yōu)勢:使程序結(jié)構(gòu)更加清晰便于程序的分工協(xié)作開發(fā)便于程序的維護12多文件工程程序的組織結(jié)構(gòu)將不同的功能和數(shù)據(jù)結(jié)構(gòu)劃分到不同的模塊中不同類型的程序放在不同的(.c)源文件中將函數(shù)的定義和使用相分離將函數(shù)的定義從程序其他代碼中分離出來,單獨存放,有利于函數(shù)的重用將函數(shù)的聲明和實現(xiàn)相分離將函數(shù)的原型聲明放在一個(.h)頭文件中將函數(shù)的具體實現(xiàn)放在另一個(.c)源文件中13多文件工程程序的組織結(jié)構(gòu)例9.4設(shè)計一個多文件工程程序,其功能是計算圓和矩形的面積和周長。在VC++環(huán)境下分析程序結(jié)構(gòu),并運行之。14注意:main.c中#include“circle.h”等使用了雙引號注意:circle.h等中使用了條件編譯指令,防止函數(shù)被重復(fù)聲明外部變量與外部函數(shù)在一個程序文件中定義的變量或函數(shù)被其他程序文件所使用外部變量(ExternalVariable)extern<變量名>;外部函數(shù)(ExternalFunction)extern<函數(shù)聲明>;15外部攝變量離與外冊部函晶數(shù)例9.粥5外部城變量繁與外藝部函規(guī)數(shù)示忍例16A.霜c…ex冒te戀rnvo則id柄f堅b(游);ex鹽te榆rnvo虜id駛f項c(奶);in跌t片x=倒0;…B.漁c…ex淋te邊rnin亞t拉x;vo嶄id施f土b(專){民…}…C.楊c…ex板te質(zhì)rnin玩t器x;vo叮id廁f瀉c(速){棋…}…思考霜題:動若B.貨c文件委中刪別除外腔部變塌量聲探明語基句“ex約te裳rn樹i夕nt但x俗;”程序扮是否屋還能錫正確嶄編譯糧?靜態(tài)塵全局俗變量件與靜識態(tài)函增數(shù)限制恩所定頭義的繳變量騾或函條數(shù)只尊能在氧本文僚件中納使用牛,而截其他早文件酬不能痕訪問礙。靜態(tài)耐全局畫變量(St陽at冒ic闊G沃lo吸ba則l晝Va夢ri筍ab顆le)st些at沸ic狹<全局茂變量滾定義>;靜態(tài)踩函數(shù)(St井a(chǎn)t霧ic挽F邁un坦ct啊io互n)st個at調(diào)ic陸<函數(shù)手定義>;17思考壘題:幻玉修改籌例9.夾5將A.窮c中變恨量x的定憑義改毒為st頃at等ic巡壽i娛nt互x肢=0冒;將B.委c中函建數(shù)fb毅()定義廚前加怖上st調(diào)at拐ic尋,重新婚編譯如程序堵,結(jié)醫(yī)果如程何?9.赴3后應(yīng)譽用舉瓶例—憤—多庭文件撓結(jié)構(gòu)劃處理呢數(shù)組晴問題例9.缸6設(shè)計迷一個輝多文女件工獄程程課序,星實現(xiàn)梅對一灣維數(shù)獵組的炊輸入頁、輸劣出、右統(tǒng)計充、查穩(wěn)找等涌。在VC薪++環(huán)境是

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論