版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第九章預(yù)處理命令1.掌握編譯預(yù)處理的概念和特點;2.
掌握“文件包含”的概念和使用;3.
掌握不帶參數(shù)的宏定義及其使用,了解帶參數(shù)的宏定義及其使用。概述一、編譯預(yù)處理的概念
C語言允許在程序中使用幾種特殊的命令(它們不是一般的C語句),在C編譯系統(tǒng)對程序進(jìn)行通常的編譯之前,先對程序中這些特殊命令進(jìn)行“預(yù)處理”,然后將預(yù)處理的結(jié)果和源程序一起再進(jìn)行通常的編譯處理,以得到目標(biāo)代碼。二、主要預(yù)處理功能⑴宏定義;⑵文件包含;⑶條件編譯一、不帶參數(shù)的宏定義及宏替換作用:用標(biāo)識符來代表一個字符串。9.1宏定義宏名宏內(nèi)容無分號宏:是對正文進(jìn)行代入或嵌入的一種功能。即從一字符流中取出某個字符串去代替源程序里的標(biāo)識符。1.一般形式:
#define標(biāo)識符字符串引例:#definePI3.1415926main(){floatl,s,r,v;
printf(“inputradius:”);
scanf(“%f”,&r);l=2.0*PI*r;s=PI*r*r;v=3.0/4*PI*r*r*r;
printf(“l(fā)=%10.4f\ns=%10.4f\nv=%10.4f\n”,l,s,v);}其中#definePI3.1415926
作用是指定標(biāo)識符PI來代表“3.1415926”⑵宏名用做代替一個字符串,不作語法檢查;⑶宏定義的字符串不能以“;”結(jié)尾,字符串結(jié)束后一定要換行;⑷宏定義的有效范圍為定義之處到#undef命令終止,如果沒有#undef命令,則有效范圍到本文結(jié)束;⑹C語言允許宏定義出現(xiàn)在程序中函數(shù)外面的任何位置,但一般情況下它總寫在文件的開頭。說明:⑴宏名一般習(xí)慣用大寫字母,以便與變量名相區(qū)別;#undef命令形式:#undef
標(biāo)識符⑸在進(jìn)行宏定義時,可以引用已定義的宏名;說明:⑴宏替換由編譯程序預(yù)先進(jìn)行;⑵宏替換范圍是除字符串以外的所有宏名字;⑶若替換后文本串中仍含有宏名字,將再次進(jìn)行替換,直到程序中不含宏名字為止。#definePI3.1415926#defineR3.0#defineL2*PI*R#defineSPI*R*R宏替換(宏展開):用宏內(nèi)容(字符串)原樣代換程序中的所有宏名字的過程。第一次替換:printf("l=%f\ns=%f\n",2*PI*R,PI*R*R);二:printf("l=%f\ns=%f\n",2*3.1415926*3.0,3.1415926*3.0*3.0);main(){
printf("l=%f\ns=%f\n",L,S);}二、帶參數(shù)的宏定義及宏替換一般形式:
#define宏名(宏形參數(shù)表)字符串作用:宏替換時以實參數(shù)替代形參數(shù)。#definePI3.1415926#defineS(r)PI*r*rmain(){floatr1=3.6,area;area=S(r1);/*S(r1)用PI*r1*r1替換*/printf("r=%farea=%f\n",r1,area);}注意:宏替換后,程序的原意表達(dá)。#definePF(x)x*x/*#definePF(x)(x)*(x)*//*#definePF(x)((x)*(x))*/main(){
inta=2,b=3,c;c=PF(a+b)/PF(a+1);
printf("\nc=%d",c);}按第一種宏定義:c=a+b*a+b/a+1*a+1;按第二種宏定義:c=(a+b)*(a+b)/(a+1)*(a+1);按第三種宏定義:c=((a+b)*(a+b))/((a+1)*(a+1));注意替換時不求值,只是字符串的原樣替換以下程序中的循環(huán)執(zhí)行了()次。#defineN2#defineMN+1#defineNUM(M+1)*M/2main(){int
i,n=0;
for(i=0;i<NUM;i++)n++;
printf("%d\n",n);}A)5B)6C)8D)9下列程序的輸出結(jié)果為()。#defineSQR(x)((x)*(x))main(){inta=10,k=2,m=1;a/=SQR(k+m)/SQR(k-m);printf("%d\n",a);}以下程序輸出的結(jié)果是()。#definePI3.1415926 #include<stdio.h> main() { printf("PI=%f\n",PI); }A)3.141593=3.141593B)PI=3.141593C)3.131593=PID)程序有錯誤,無結(jié)果9.2“文件包含”處理“文件包含“:是指一個源文件可以將另外一個源文件的全部內(nèi)容包含進(jìn)來。
C語言提供#include命令來實現(xiàn)“文件包含”的操作,其一般形式為:
#include“文件名”
#include<文件名>或作用:使編譯系統(tǒng)把指定的被包含文件嵌入到帶有#include的源文件中?!拔募笔疽鈭D
file1.cfile2.cfile1.c
包含#include“file2.c”B
ABA
(a)(b)(c)包含文件的查找方法:#include“文件名”
先在當(dāng)前工作目錄中去查找,若找不到再到指定的標(biāo)準(zhǔn)目錄中去查找。如:對TurboC編譯系統(tǒng),先在用戶目錄下查找,然后在TC\include文件夾中查找.可以自己定義用戶工作目錄如:
#include“e:\mytc\file1.c”#include<文件名>
直接到系統(tǒng)指定的標(biāo)準(zhǔn)目錄中去查找。如:對TurboC編譯系統(tǒng),直接在TC\include
文件夾中查找。格式1 #include"文件名“格式2 #include<文件名>下面4個結(jié)論,正確的是()。A)格式1中的文件名能帶路徑,而格式2不能。B)格式1中的文件名不能帶路徑,而格式2可以。C)如果被包含文件在當(dāng)前目錄下,兩種格式都能用。D)如果文件名中不帶路徑,格式1能搜索當(dāng)前目錄和C編譯環(huán)境指定的標(biāo)準(zhǔn)目錄,而格式2不行。9.3條件編譯條件編譯:根據(jù)條件選擇被編譯的源程序行。使用宏定義的標(biāo)識符作為編譯條件使用常量表達(dá)式的值作為編譯條件一、使用宏定義的標(biāo)識符作為編譯條件
#ifdef
標(biāo)識符程序段1
#else
程序段2#endif
形式一:作用:當(dāng)所指定的標(biāo)識符已經(jīng)被#define命令定義過,則在程序編譯階段只編譯程序段1,否則編譯程序段2。#ifdef
標(biāo)識符程序段1
#endif
形式二:作用:當(dāng)所指定的標(biāo)識符已經(jīng)被#define命令定義過,則在程序編譯階段只編譯程序段1,#ifndef
標(biāo)識符程序段1
#else
程序段2#endif
形式三:作用:當(dāng)所指定的標(biāo)識符未被#define命令定義過,則在程序編譯階段只編譯程序段1,否則編譯程序段2。例1:#ifdefTURBO#defineint
int#else#defineintshort#endif可用于實現(xiàn)程序在不同環(huán)境下的兼容性。例2:#ifdefDEBUG
printf(“x=%d,y=%d\n”,x,y);#endif可用于進(jìn)行程序的調(diào)試。調(diào)試過程中,在程序前面加#defineDEBUG
調(diào)試完成后,將前面的#defineDEBUG刪除掉二、使用常量表達(dá)式的值作為編譯條件#if表達(dá)式程序段1
#else
程序段2#endif
形式:作用:當(dāng)所指定的表達(dá)式為真(非零)時就編譯程序段1,否則編譯程序段2。
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年大學(xué)班級個人工作計劃范文
- 2025年月會計工作計劃模板
- 2025年心內(nèi)科年終工作總結(jié)及工作計劃
- 2025年行政月工作計劃范文
- 2025年編輯部工作計劃范文
- Unit 4 Shopping Day Period 2 (說課稿)-2024-2025學(xué)年人教新起點版英語五年級上冊
- 2025年度工作計劃及銷售目標(biāo)
- 2025年社區(qū)雙擁工作計劃報告
- 肺結(jié)節(jié)病理知識培訓(xùn)課件
- Unit 6 The power of plants 大單元說課稿2024-2025學(xué)年外研版英語七年級上冊
- AQ 1029-2019 煤礦安全監(jiān)控系統(tǒng)及檢測儀器使用管理規(guī)范
- 玄武巖纖維簡介演示
- 米什金貨幣金融學(xué)英文版習(xí)題答案chapter1英文習(xí)題
- 建筑公司員工合規(guī)手冊
- 質(zhì)量保證的基本原則與方法
- 第1講-句子結(jié)構(gòu)
- 鼻腔沖洗護(hù)理技術(shù)團(tuán)體標(biāo)準(zhǔn)解讀
- 紅領(lǐng)巾知識伴我成長課件
- 廚邦醬油推廣方案
- 腦血管病的三級預(yù)防
- 保險產(chǎn)品創(chuàng)新與市場定位培訓(xùn)課件
評論
0/150
提交評論