版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第10章
編譯預(yù)處理-2-★宏定義★文件包含★條件編譯
本章教學(xué)內(nèi)容本章教學(xué)目標(biāo)
★掌握帶參與不帶參宏定義的使用★掌握文件包含的使用★了解條件編譯-3-10.1宏定義
在C語(yǔ)言中所有的預(yù)處理命令都以”#”開頭,宏定義是預(yù)處理指令的一種,以#define開頭。在C語(yǔ)言源程序中允許用一個(gè)標(biāo)識(shí)符來(lái)表示一個(gè)字符串,稱為“宏”。被定義為“宏”的標(biāo)識(shí)符稱為“宏名”。在預(yù)處理過(guò)程中,宏調(diào)用會(huì)被展開為對(duì)應(yīng)的字符串,這個(gè)過(guò)程稱為“宏代換”或“宏展開”。
宏的使用有很多好處,不僅可以簡(jiǎn)化程序的書寫,而且便于程序的修改和移植,使用宏名來(lái)代替一個(gè)字符串,可以減少程序中重復(fù)書寫某些字符串的工作量。
根據(jù)宏定義中是否有參數(shù),可以將宏分為不帶參數(shù)的宏定義與帶參數(shù)的宏定義兩種,下面分別討論這兩種宏的定義與調(diào)用。-4-10.1.1不帶參數(shù)的宏定義
不帶參數(shù)的宏的宏名后面沒(méi)有參數(shù),不帶參數(shù)的宏定義又稱簡(jiǎn)單宏定義。其定義的一般形式為:#define宏名
字符串
其中,“#”表示預(yù)處理命令。define是關(guān)鍵字,表示該命令為宏定義。為了與一般的普通變量相區(qū)別,宏名一般使用大寫?!白址币话銥槌A?、表達(dá)式或字符串。
在進(jìn)行預(yù)處理時(shí),系統(tǒng)會(huì)將程序中的“宏名”用“字符串”來(lái)替換。-5-10.1.1不帶參數(shù)的宏定義【例10-1】不帶參數(shù)的宏定義的例子。
#include<stdio.h>#defineM(a*a+4*a)intmain(){inta,b;scanf("%d",&a);b=M*M+3*M+5;printf("b=%d\n",b);return0;}-6-帶參數(shù)的宏定義
在C語(yǔ)言中,宏定義可以不帶參數(shù),也可以帶參數(shù)。
在宏定義中的參數(shù)稱為形式參數(shù),在宏調(diào)用中的參數(shù)稱為實(shí)際參數(shù)。
帶參數(shù)宏定義的一般形式為:
#define宏名(形參表)字符串帶參數(shù)宏調(diào)用的一般形式為:
宏名(實(shí)參表);帶參數(shù)的宏調(diào)用時(shí),不僅簡(jiǎn)單地用字符串代替宏名,而且要用實(shí)參代換對(duì)應(yīng)的形參。例如:
#defineM(x)5*x+x*x/*宏定義*/f=M(8);/*宏調(diào)用*/在宏調(diào)用時(shí),用實(shí)參8去代替形參x,經(jīng)過(guò)預(yù)處理宏展開后f=5*8+8*8。-7-帶參數(shù)的宏定義(續(xù))【例10-2】帶參數(shù)的宏定義舉例。#include<stdio.h>#defineM(x,y,z)x*y+zintmain(){inta=1,b=2,c=3;printf(“%d\n”,M(a+b,b+c,c+a));return0;}-8-帶參數(shù)的宏定義(續(xù))
【例10-3】用宏來(lái)定義多個(gè)語(yǔ)句的例子。
#include<stdio.h>#defineM(x,y,z)x=a*m;y=a*n;z=a*hintmain(){inta,m,n,h,q1,q2,q3;a=5,m=8,n=7,h=10;M(q1,q2,q3);printf(“q1=%d\nq2=%d\nq3=%d\n”,q1,q2,q3);return0;}-9-10.2文件包含
在C語(yǔ)言中文件包含是指一個(gè)源文件可以將另一個(gè)源文件的全部?jī)?nèi)容包含進(jìn)來(lái)。編譯預(yù)處理程序把#include命令行中所指定的源文件的全部?jī)?nèi)容放到源程序的#include命令行所在的位置。文件包含的一般形式為:
#include<文件名>或
#include“文件名”-10-10.2文件包含【例10-5】將宏定義放在頭文件head.h中,使用文件包含命令將它包含在一個(gè)程序中。/*文件head.h*/#defineMAX(a,b)((a)>(b)?(a):(b))/*example10-5.c*/#include<stdio.h>#include“head.h”intmain(){intx,y,max;printf(“pleaseinputtwonumbers:”);scanf(“%d,%d”,&x,&y);max=MAX(x,y);printf(“max=%d\n”,max);return0;}-11-10.3條件編譯
條件編譯是C語(yǔ)言三種編譯預(yù)處理命令之一。一般情況下,源程序中的所有行均參加編譯,但有時(shí)希望部分行在滿足一定條件時(shí)才進(jìn)行編譯,即按不同的條件去編譯不同的程序部分,從而產(chǎn)生不同的目標(biāo)代碼文件,這就稱為“條件編譯”。條件編譯有以下幾種形式:
(1)#ifdef命令條件編譯命令#ifdef的一般形式為:#ifdef標(biāo)識(shí)符程序代碼1[#else程序代碼2]#endif-12-【例題10-6】#ifdef形式的條件編譯。
#include<stdio.h>#definePRICE8intmain(){#ifdefPRICEprintf(“PRICEis%d\n”,PRICE);#elseprintf(“PRICEisnotfound!\n”);#endifreturn0;}(2)#ifndef命令條件編譯命令#ifndef的一般形式為:
#ifndef標(biāo)識(shí)符程序代碼1#else程序代碼2#endif-13-10.3條件編譯(續(xù))
【例10-7】#ifndef形式的條件編譯。#include<stdio.h>#definePRICE8intmain(){#ifndefPRICEprintf(“PRICEis%d\n”,PRICE);#elseprintf(“PRICEisnotfound!\n”);#endifreturn0;}10.3條件編譯(續(xù))
(3)#if命令條件編譯命令#if的一般形式為:
#if表達(dá)式程序代碼1[#else程序代碼2]#endif功能:若表達(dá)式的值為真(非0),則對(duì)程序代碼1進(jìn)行編譯,否則對(duì)程序代碼2進(jìn)行編譯。-14-10.3條件編譯(續(xù))【例題10-8】#if形式的條件編譯。
#include<stdio.h>#defineR1intmain(){floatcr,s;printf(“pleaseenteranumber:”);scanf(“%f”,&c);#ifRr=3.14159*c*c;printf(“areaofroundis:%f\n”,r);#else-15-
s=c*c;printf(“areaofsquareis:%f\n”,s);#endifreturn0;}本章小結(jié)
編譯預(yù)處理是指在對(duì)源程序進(jìn)行編譯之前,首先對(duì)源程序中的編譯預(yù)處理命令進(jìn)行處理。C語(yǔ)言中所有的預(yù)處理命令都以“#”開頭,末尾不能加分號(hào)。所有的預(yù)處理命令都在編譯前處理,因此它不具有任何計(jì)算、操作等功能。若預(yù)處理命令有變化,則必須對(duì)程序重新進(jìn)行編譯和鏈接。C語(yǔ)言提供的編譯預(yù)處理命令主要有宏定義、文件包含和條件編譯3種。
宏定義是用一個(gè)標(biāo)識(shí)符來(lái)表示一個(gè)字符串,這個(gè)字符串可以是常量、變量或表達(dá)式。在宏替換時(shí),用該字符串代換宏名。根據(jù)宏定義中是否有參數(shù),可以將宏分為不帶參數(shù)的宏定義與帶參數(shù)的宏定義兩種。在寫帶有參數(shù)的宏定義時(shí),宏名與帶括號(hào)參數(shù)間不能有空格,否則將空格以后的字符都作為了替換字符串的一部分,這樣就變成不帶參數(shù)的宏定義了。不要把帶參數(shù)的宏定義與帶參數(shù)的函數(shù)混淆,帶參的宏定義在預(yù)處理時(shí)只是字符串的替換,而帶參的函數(shù)卻是將實(shí)參的值一一對(duì)應(yīng)的傳遞給形參。
文件包含是指一個(gè)源文件可以將另一個(gè)源文件的
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 福建省南平市武夷山第二中學(xué)2021年高三物理上學(xué)期期末試卷含解析
- 個(gè)人車位買賣協(xié)議書模板
- 2024廣告裝飾工程合作合同典范版B版
- 1假期有收獲 說(shuō)課稿-2024-2025學(xué)年道德與法治二年級(jí)上冊(cè)統(tǒng)編版
- 汽車設(shè)計(jì)的創(chuàng)新之路
- 科技驅(qū)動(dòng)的環(huán)保革新
- 外出經(jīng)營(yíng)合同(2篇)
- 基礎(chǔ)設(shè)施合作投資協(xié)議書(2篇)
- 2024年網(wǎng)絡(luò)平臺(tái)蔬菜水果銷售合同3篇
- 15-1《諫太宗十思疏》說(shuō)課稿 2023-2024學(xué)年統(tǒng)編版高中語(yǔ)文必修下冊(cè)
- 2025年中國(guó)AI AGENT(人工智能體)行業(yè)市場(chǎng)動(dòng)態(tài)分析、發(fā)展方向及投資前景分析報(bào)告
- 家居建材行業(yè)綠色材料應(yīng)用及節(jié)能設(shè)計(jì)方
- 大慶市2025屆高三年級(jí)第二次教學(xué)質(zhì)量檢測(cè)(二模)政治試卷(含答案)
- 2024年中國(guó)玩具工程車市場(chǎng)調(diào)查研究報(bào)告
- 2025年內(nèi)蒙古阿拉善額濟(jì)納旗事業(yè)單位引進(jìn)48人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025-2030年中國(guó)電動(dòng)三輪車市場(chǎng)發(fā)展現(xiàn)狀及前景趨勢(shì)分析報(bào)告
- TCABEE 063-2024 建筑光儲(chǔ)直柔系統(tǒng)變換器 通 用技術(shù)要求
- 【9化期末】合肥市廬陽(yáng)區(qū)2023-2024學(xué)年九年級(jí)上學(xué)期期末化學(xué)試題
- 高一下學(xué)期生物人教版必修二:3.4 基因通常是有遺傳效應(yīng)的DNA片段課件
- 雅禮中學(xué)2024-2025學(xué)年初三創(chuàng)新人才選拔數(shù)學(xué)試題及答案
- 下屬企業(yè)考核報(bào)告范文
評(píng)論
0/150
提交評(píng)論