




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第8章 預(yù)處理命令,1 .掌握編譯預(yù)處理的概念和特點; 2.掌握不帶參數(shù)的宏定義及其使用, 了解帶參數(shù)的宏定義及其使用。 3.掌握“文件包含”的概念和使用; 4.了解條件編譯的作用和形式。,8.1 編譯預(yù)處理命令,一、編譯預(yù)處理的概念,C語言允許在程序中使用幾種特殊的命令,在C編譯系統(tǒng)對程序進行通常的編譯之前,先對程序中這些特殊命令進行“預(yù)處理”,然后將預(yù)處理的結(jié)果和源程序一起再進行通常的編譯處理,以得到目標(biāo)代碼。,二、主要預(yù)處理功能,宏定義 ; 文件包含; 條件編譯,一、不帶參數(shù)的宏定義及宏替換,8.2 宏定義,宏名,宏內(nèi)容,無分號,引例:,#define PI 3.1415926 main
2、() float l,s,r,v; printf(“請輸入半徑 :”); scanf(“%f”, ,注意:,宏名一般習(xí)慣用大寫字母; 宏名用做代替一個字符串,不作語法檢查; 宏定義無需“;” 宏定義的有效范圍為,從定義之處到: #undef命令終止 若無#undef命令,則有效范圍到本文結(jié)束;,#undef 標(biāo)識符, 位置: 允許出現(xiàn)在程序中函數(shù)外的任意位置 但一般情況下它總寫在文件的開頭。 在進行宏定義時,可以引用已定義的宏名;例,#define PI 3.1415926 #define R 3.0 #define L 2*PI*R #define S PI*R*R,第一次替換:printf
3、(l=%f ns=%fn, 2*PI*R, PI*R*R);,main( ) printf(l=%f ns=%fn,L,S); ,二:printf(l=%f ns=%fn, 2*3.1415926*3.0, 3.1415926*3.0*3.0);,宏替換(宏展開) :用宏內(nèi)容(字符串)原樣替換 程序中的所有宏名字的過程。,二、帶參數(shù)的宏定義及宏替換,#define 宏名(宏形參數(shù)表) 字符串,#define PI 3.1415926 #define S(r) PI*r*r main( ) float r1=3.6, area; area= S(r1); printf(r=%f area=%fn
4、,r1,area); ,用PI*r1*r1替換,#define PF(x) x*x /*#define PF(x) (x)*(x) */ /*#define PF(x) (x)*(x) */ main() int a=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);,注意替換時不求值, 只是字符串的原樣替換,*三、帶參數(shù)的宏替換與函數(shù)的主要區(qū)別,函數(shù)調(diào)用時
5、,先求出實參的值,然后代入形參。 而使用帶參的宏只是進行簡單的字符替換。,函數(shù)調(diào)用是在程序運行時處理的,而宏替換則是在編譯時進行的。,函數(shù)中函數(shù)名及參數(shù)均有一定的數(shù)據(jù)類型,而宏 不存在類型問題,宏名及其參數(shù)無類型。,宏替換不占運行時間,只占編譯時間,而函數(shù)調(diào) 用則占運行時間。,#define MAX(x,y) xy?x:y main( ) int n1,n2; float f1,f2; scanf(%d%d%f%f, ,程序舉例:,經(jīng)預(yù)編譯宏替換后的printf語句如下:,printf(maxi=%dmaxf=%f,n1n2?n1:n2, f1f2?f1:f2);,9.2 “文件包含”處理,一
6、般形式為:,#include “文件名”,先在當(dāng)前工作目錄中去查找,若找不到再到指定的標(biāo)準(zhǔn)目錄中去查找。,如:對Turbo C編譯系統(tǒng),先在用戶目錄下 查找,然后在TCinclude文件夾中查找。,#include ,直接到系統(tǒng)指定的標(biāo)準(zhǔn)目錄中去查找。,如:對Turbo C編譯系統(tǒng),直接在TCinclude 文件夾中查找。,9.3 條件編譯,一、使用宏定義的標(biāo)識符作為編譯條件,作用:當(dāng)所指定的標(biāo)識符已經(jīng)被#define 命令定義過,則在程序編譯階段只編譯程序段1,否則編譯程序段2。,作用:當(dāng)所指定的標(biāo)識符已經(jīng)被#define 命令定義過,則在程序編譯階段只編譯程序段1,,作用:當(dāng)所指定的標(biāo)識符
7、未被#define 命令定義過,則在程序編譯階段只編譯程序段1,否則編譯程序段2。,例1: #ifdef TURBO #define int int #else #define int short #endif,可用于實現(xiàn)程序在不同環(huán)境下的兼容性。,例2: #ifdef DEBUG printf(“x=%d,y=%dn”,x,y); #endif,可用于進行程序的調(diào)試。,調(diào)試過程中,在程序前面加#define DEBUG 調(diào)試完成后,將前面的#define DEBUG刪除掉,二、使用常量表達式的值作為編譯條件,作用:當(dāng)所指定的表達式為真(非零)時就編譯程序段1,否則編譯程序段2。,可以事先給定一定條件,使程序在不同的條件下執(zhí)行不同的功能。,程序舉例:用同一程序?qū)崿F(xiàn)大小寫字母轉(zhuǎn)換(若定義UP轉(zhuǎn)換為大寫),#include stdio.h #define UP main(
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工傷傷殘鑒定管理辦法
- 廣西農(nóng)田建設(shè)管理辦法
- 托育機構(gòu)證照管理辦法
- 干貨調(diào)料配送管理辦法
- 福利中心人員管理辦法
- 工業(yè)自動化EPC實施計劃
- 2025年中國互聯(lián)網(wǎng)+機車租賃市場深度調(diào)研分析及投資前景研究預(yù)測報告
- 2025年四年級下班主任家訪實施計劃
- 小學(xué)部編版三年級語文第六單元重點教學(xué)計劃
- 2023-2029年中國畜牧獸醫(yī)中心行業(yè)市場發(fā)展現(xiàn)狀及投資潛力預(yù)測報告
- 互聯(lián)網(wǎng)醫(yī)療項目計劃書
- 量子信息學(xué)導(dǎo)論 課件 第8章 量子度量學(xué)
- 勞動器材配備一覽表
- 火電廠危險化學(xué)品安全管理課件
- 骨科專業(yè)手外科臨床技術(shù)操作規(guī)范2023版
- JB-T 4149-2022 臂式斗輪堆取料機
- 航空航天工程行業(yè)技術(shù)發(fā)展與創(chuàng)新趨勢
- 變電一次設(shè)備標(biāo)準(zhǔn)缺陷庫
- 監(jiān)理通知回執(zhí)單新
- 三北防護林課件
- 三年級小學(xué)英語閱讀理解
評論
0/150
提交評論