版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第6章編譯預(yù)處理1C語言培訓(xùn)教材第6章編譯預(yù)處理主要內(nèi)容
編譯預(yù)處理多文件程序的調(diào)試方法條件編譯2C語言培訓(xùn)教材第6章編譯預(yù)處理源文件*.c運(yùn)行文件*.exe編譯編譯編譯目標(biāo)文件*.obj連接編譯連接連接編譯預(yù)處理編譯編譯預(yù)處理包括:
宏定義文件包含條件編譯6.1編譯預(yù)處理3C語言培訓(xùn)教材第6章編譯預(yù)處理6.1編譯預(yù)處理(續(xù))源文件*.c運(yùn)行文件*.exe目標(biāo)文件*.obj編譯連接main(){floatr,s,c;scanf(“%f”,&r);s=r*r*3.14;c=2*r*3.14;printf(“s=%f,c=%f”,s,c);}?
如何修改圓周率4C語言培訓(xùn)教材第6章編譯預(yù)處理#define
宏名
字符串宏定義的功能:
在進(jìn)行編譯前,用字符串原樣替換程序中的宏名。這個(gè)替換過程稱為“宏替換”或“宏展開”,字符串也稱為替換文本。
命令的一般格式:6.1.1不帶參數(shù)的宏定義6.1編譯預(yù)處理(續(xù))5C語言培訓(xùn)教材第6章編譯預(yù)處理6.1編譯預(yù)處理(續(xù))例如:#definePI
3.14main(){floatr,s,c;scanf(“%f”,&r);s=r*r*PI;c=2*r*PI;printf(“s=%f,c=%f”,s,c);}替換3.143.14編譯6C語言培訓(xùn)教材第6章編譯預(yù)處理6.1編譯預(yù)處理(續(xù))②為了增加程序的可讀性,建議宏名用大寫字母,其他的標(biāo)識(shí)符用小寫字母。③雙引號(hào)中有與宏名相同的字符串不進(jìn)行替換。④已經(jīng)定義的宏名可以被后定義的宏名引用。在預(yù)處理時(shí)將層層進(jìn)行替換。說明:①宏定義的作用域是從定義處開始到源文件結(jié)束,但根據(jù)需要可用undef命令終止其作用域。形式為:
#undef宏名7C語言培訓(xùn)教材第6章編譯預(yù)處理【例6.1】不帶參數(shù)的宏定義。源程序:#definePI3.14#defineSPI*r*r#defineV4*S*r/3main(){floatr;printf("\nInputr:");scanf("%f",&r);printf("S=%.2fV=%.2f\n",S,V);}編譯預(yù)處理后的程序:main(){floatr;printf("\nInputr:");scanf("%f",&r);printf("S=%.2fV=%.2f\n",3.14*r*r,4*
3.14*r*r
*r/3);}SVSV進(jìn)入編譯8C語言培訓(xùn)教材第6章編譯預(yù)處理命令的一般形式6.1.2帶參數(shù)的宏定義#define宏名(形參表)
字符串功能:在編譯預(yù)處理時(shí),把源程序中所有帶參數(shù)的宏名用宏定義中的字符串替換,并且用宏名后圓括號(hào)中的實(shí)參替換字符串中的形參。例如:#defineMAX(X,Y)((X)>(Y)?(X):(Y))6.1編譯預(yù)處理(續(xù))9C語言培訓(xùn)教材第6章編譯預(yù)處理6.1編譯預(yù)處理(續(xù))【例6.30】帶參數(shù)的宏定義。#defineMAX(x,y)((x)>(y)?(x):(y))main(){…printf("%d\n",a,b,MAX(a,b));printf("%d\n",MAX(a+m,b+n));}分兩次替換:①將宏名MAX(a,b)
替換成字符串((x)>(y)?(x):(y))。②用實(shí)參a替換形參x,實(shí)參b替換形參y。程序中的兩個(gè)printf語句被展開為:printf("%d\n",((a)>(b)?(a):(b)));printf("%d\n",((a+m)>(b+n)?(a+m):(b+n)));10C語言培訓(xùn)教材第6章編譯預(yù)處理6.1編譯預(yù)處理(續(xù))【例6.3】分析下面程序運(yùn)行后的輸出結(jié)果。#defineMA(x)x*(x-1)main(){inta=1,b=2;printf("%d\n",MA(1+a+b));}分兩次替換:
①M(fèi)A(1+a+b)
用x*(x-1)
替換。②用1+a+b替換x。printf語句被展開為:printf("%d\n",1+a+b*(1+a+b-1));特別注意:由于替換文本中的x沒有用括號(hào)括起,因此,1+a+b也不能用括號(hào)括起。程序輸出結(jié)果:811C語言培訓(xùn)教材第6章編譯預(yù)處理6.1編譯預(yù)處理(續(xù))1.命令的一般形式
格式1:#include<文件名>格式2:#include"文件名"6.1.3文件包含
文件包含是將指定的某個(gè)源文件的內(nèi)容全部包含到當(dāng)前文件中。用include命令實(shí)現(xiàn)。用格式1,預(yù)處理程序僅在\TC\INCLUDE目錄下查找指定文件。用格式2,預(yù)處理程序首先在當(dāng)前目錄中查找指定文件,若找不到再到\TC\INCLUDE目錄中查找。12C語言培訓(xùn)教材第6章編譯預(yù)處理6.1編譯預(yù)處理(續(xù))例如:調(diào)用sin(x)函數(shù)時(shí),要在程序的開頭使用如下命令:#include<math.h>在預(yù)處理時(shí),用math.h文件內(nèi)容替換#include<math.h>命令行。2.功能在預(yù)處理時(shí),將include命令后指定文件的內(nèi)容替換該命令行。13C語言培訓(xùn)教材第6章編譯預(yù)處理6.2多文件程序的調(diào)試方法操作步驟如下:①在TC環(huán)境下建立一個(gè)工程文件(擴(kuò)展名為prj),設(shè)文件名為test.prj,文件內(nèi)容如下:
fiile3.c若這3個(gè)文件不在當(dāng)前盤或當(dāng)前路徑下,需要在文件名前加盤符和路徑。如果已經(jīng)將源文件編譯成目標(biāo)文件,可在工程文件中直接寫目標(biāo)文件名。1.使用工程文件將多個(gè)文件連接成一個(gè)可執(zhí)行文件的方法例如:將、和合并成一個(gè)可執(zhí)行文件。14C語言培訓(xùn)教材第6章編譯預(yù)處理6.2多文件程序的調(diào)試方法(續(xù))②在TC主菜單的“Project”下拉菜單中選擇“Projectname”項(xiàng),輸入文件名test.prj(文件名前也可以加盤符和路徑)。③在TC環(huán)境下,按Ctrl+F9,系統(tǒng)首先找到工程文件test.prj,然后將、和分別進(jìn)行編譯,若編譯沒通過,根據(jù)出錯(cuò)信息檢查、修改源程序,然后再按Ctrl+F9重新編譯。若編譯通過,系統(tǒng)自動(dòng)生成三個(gè)對(duì)應(yīng)的目標(biāo)文件:
、
和fiile3.obj。接著系統(tǒng)自動(dòng)進(jìn)行連接,連接成功則生成test.exe并自動(dòng)執(zhí)行該程序。15C語言培訓(xùn)教材第6章編譯預(yù)處理6.2多文件程序的調(diào)試方法(續(xù))2.使用文件包含命令將多個(gè)文件連接成一個(gè)可執(zhí)行文件的方法16C語言培訓(xùn)教材第6章編譯預(yù)處理6.2多文件程序的調(diào)試方法(續(xù))#include""#include""ABCBCA預(yù)處理前預(yù)處理后17C語言培訓(xùn)教材第6章編譯預(yù)處理6.3條件編譯實(shí)現(xiàn)條件編譯的格式有如下三種:格式一:#ifdef宏名 程序段1#else
程序段2#endif條件編譯: 是對(duì)源程序中的某段程序通過條件來控制是否參加本次編譯。18C語言培訓(xùn)教材第6章編譯預(yù)處理
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度新型城鎮(zhèn)化發(fā)展戰(zhàn)略規(guī)劃合同
- 二零二四徐匯區(qū)汽車吊車租賃工程合同范本6篇
- 二零二五版電梯安全防護(hù)設(shè)施購銷合同4篇
- 2025年度廣告代理服務(wù)合同范本(二零二五年度)
- 二零二五年度電商用戶隱私保護(hù)與數(shù)據(jù)安全合同7篇
- 2025年度租賃房屋裝修合同下載版
- 2025年度戶外公共空間花卉綠植布置合同
- 二零二四年度企業(yè)內(nèi)部控制與風(fēng)險(xiǎn)管理咨詢合同9篇
- 2025年度跨境電商平臺(tái)股權(quán)重組與運(yùn)營管理合同
- 2025年度化妝品產(chǎn)品售后服務(wù)及客戶關(guān)系維護(hù)合同
- 2025年中國南方航空股份有限公司招聘筆試參考題庫含答案解析
- 商務(wù)部發(fā)布《中國再生資源回收行業(yè)發(fā)展報(bào)告(2024)》
- 2025年福建新華發(fā)行(集團(tuán))限責(zé)任公司校園招聘高頻重點(diǎn)提升(共500題)附帶答案詳解
- 江蘇省駕??荚嚳颇恳豢荚囶}庫
- 四川省成都市青羊區(qū)成都市石室聯(lián)合中學(xué)2023-2024學(xué)年七上期末數(shù)學(xué)試題(解析版)
- 咨詢公司績效工資分配實(shí)施方案
- 2025新人教版英語七年級(jí)下單詞表
- 中華護(hù)理學(xué)會(huì)團(tuán)體標(biāo)準(zhǔn)-氣管切開非機(jī)械通氣患者氣道護(hù)理
- 未成年入職免責(zé)協(xié)議書
- 光伏電站巡檢專項(xiàng)方案
- 肺栓塞的護(hù)理查房完整版
評(píng)論
0/150
提交評(píng)論