《C編譯預(yù)處理與多文件工程程序課件》由會(huì)員分享,可在線閱讀,更多相關(guān)《C編譯預(yù)處理與多文件工程程序課件(19頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、*,計(jì)算機(jī)軟件教學(xué)中心,http:/ 編譯預(yù)處理,編譯預(yù)處理,(,Preprocessor,),編譯器根據(jù)源程序中的編譯預(yù)處理指令對(duì)源程序文本進(jìn)行相應(yīng)操作的過程,編譯預(yù)處理指令都以,“,#”,開頭,它不是,C,語(yǔ)言語(yǔ)句,結(jié)尾不帶“,;”,號(hào),三種編譯預(yù)處理指令,文件包含,(,Including files,),宏定義,(,Macro Definition,),條件編譯,(,Conditional Compilation,),4,文件包含,頭文件,(,Header File,),主要的作用是保存程序的聲明,包括:功能函數(shù)原型、數(shù)據(jù)類型的聲明等,如:,stdio.h,、,math.h,、,stri
2、ng.h,等。,文件包含指令的一般格式為:,#include,到編譯系統(tǒng)指定的標(biāo)準(zhǔn)目錄(,include,)下去查找該頭文件,若沒有找到就報(bào)錯(cuò)。多用于包含,標(biāo)準(zhǔn)頭文件,。,#include,頭文件名,“,首先到當(dāng)前工作目錄中查找頭文件;若沒找到,再到查找編譯系統(tǒng)指定的標(biāo)準(zhǔn)目錄中查找。多用于包含,用戶自定義的頭文件,。,5,宏定義,宏定義,將一個(gè)標(biāo)識(shí)符定義為一個(gè)字符串。,在編譯預(yù)處理時(shí),源程序中的該標(biāo)識(shí)符均以指定的,字符串來(lái)代替,。,宏定義也稱為,宏替換,。,宏定義指令分為:,無(wú)參宏指令,帶參宏指令,6,宏定義,無(wú)參宏指令,#define ,例,9.1,無(wú)參宏指令應(yīng)用示例,7,#define P
3、I 3.14159,/*無(wú)參宏定義1,符號(hào)常量*/,#define ISPOSITIVE 0,/*無(wú)參宏定義2*/,#define FORMAT Area=%fn,/*無(wú)參宏定義3*/,#define ERRMSG Input error!n,/*無(wú)參宏定義4*/,思考題:若在本例宏定義命令的后面都加上“,;”,號(hào),程序是否還能正確編譯?,宏定義,帶參宏指令,#define (),例,9.2,帶參宏指令應(yīng)用示例,8,#define SUB(a,b)a-b,/*帶參宏定義*/,c=SUB(a,b);,/*替換為:c=a-b;*/,c=SUB(3,1+2);,/*,替換為:,c=3-1+2;,結(jié)果
4、不為,0,*/,思考題:如何修改本例宏定義使得,SUB(3,1+2),的結(jié)果為,0,?,宏定義,取消宏定義指令,#undef ,例如:,#undef PI,表示取消標(biāo)識(shí)符,PI,的宏定義,9,條件編譯,條件編譯指令格式,1,:,#ifdef ,#else,#endif,例,9.3,條件編譯指令應(yīng)用示例,用于程序的調(diào)試信息的輸出,10,條件編譯,條件編譯指令格式,2,:,#ifndef ,#else,#endif,可以用來(lái)防止頭文件的重復(fù)包含,具體下面,9.2,節(jié)介紹,11,9.2,多文件工程程序,多文件工程程序,(,Project with Multiple,Source Files,),程序
5、代碼按一定的分類原則被劃分為若干個(gè)部分,也稱為模塊,(,Module,),優(yōu)勢(shì):,使程序結(jié)構(gòu)更加清晰,便于程序的分工協(xié)作開發(fā),便于程序的維護(hù),12,多文件工程程序的組織結(jié)構(gòu),將不同的功能和數(shù)據(jù)結(jié)構(gòu)劃分到不同的模塊中,不同類型的程序放在不同的(,.c,)源文件中,將函數(shù)的定義和使用相分離,將函數(shù)的定義從程序其他代碼中分離出來(lái),單獨(dú)存放,有利于函數(shù)的重用,將函數(shù)的聲明和實(shí)現(xiàn)相分離,將函數(shù)的原型聲明放在一個(gè)(,.h,)頭文件中,將函數(shù)的具體實(shí)現(xiàn)放在另一個(gè)(,.c,)源文件中,13,多文件工程程序的組織結(jié)構(gòu),例,9.4,設(shè)計(jì)一個(gè)多文件工程程序,其功能是計(jì)算圓和矩形的面積和周長(zhǎng)。,在,VC+,環(huán)境下分析
6、程序結(jié)構(gòu),并運(yùn)行之。,14,注意:,main.c,中,#include“circle.h”,等使用了雙引號(hào),注意:,circle.h等中使用了條件編譯指令,,防止,函數(shù)被重復(fù)聲明,外部變量與外部函數(shù),在一個(gè)程序文件中定義的變量或函數(shù)被其他程序文件所使用,外部變量,(,External Variable,),extern ;,外部函數(shù),(,External Function,),extern ;,15,外部變量與外部函數(shù),例,9.5,外部變量與外部函數(shù)示例,16,A.c,extern,void fb();,extern,void fc();,int x=0;,B.c,extern,int x;,
7、void fb(),C.c,extern,int x;,void fc(),思考題:若,B.c,文件中刪除外部變量聲明語(yǔ)句“,extern int x;”,程序是否還能正確編譯?,靜態(tài)全局變量與靜態(tài)函數(shù),限制所定義的變量或函數(shù)只能在本文件中使用,而其他文件不能訪問。,靜態(tài)全局變量,(,Static Global Variable,),static ;,靜態(tài)函數(shù),(,Static Function,),static ;,17,思考題:修改例,9.5,將,A.c,中變量,x,的定義改為,static int x=0;,將,B.c,中函數(shù),fb(),定義前加上,static,重新編譯程序,結(jié)果如何?,9.3 應(yīng)用舉例多文件結(jié)構(gòu)處理數(shù)組問題,例,9.6,設(shè)計(jì)一個(gè)多文件工程程序,實(shí)現(xiàn)對(duì)一維數(shù)組的輸入、輸出、統(tǒng)計(jì)、查找等。,在,VC+,環(huán)境下分析程序結(jié)構(gòu),并運(yùn)行之。,18,模塊化程序設(shè)計(jì)思想,(,Modular Programming,),:,自頂向下、,逐步分解、,分而治之,19,輸入理想的程序,輸出快樂的人生,