版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、第7章 編譯預(yù)處理學(xué)習(xí)目標(biāo)領(lǐng)會編譯預(yù)處理的作用和基本過程。會使用常用的編譯預(yù)處理命令。知道運用編譯預(yù)處理命令時的常見錯誤。 編譯預(yù)處理的概念7.1 宏定義7.2 文件包含7.3 條件編譯什么是編譯預(yù)處理?預(yù)處理命令用在什么位置?什么是宏定義?什么是宏替換?宏定義時如何使用參數(shù)?什么文件包含?常用的頭文件有哪些?怎樣使用條件編譯命令?條件編譯命令有哪些格式? 所謂預(yù)處理是指在進行編譯的第一遍掃描(詞法掃描和語法分析)之前所作的工作。在源程序中,這些命令一般都放在源文件的前面,稱為預(yù)處理部分。 返回7.1 宏定義在語言源程序中允許用一個標(biāo)識符來表示一個字符串,稱為“宏”。宏定義是由源程序中的宏定義
2、命令完成的。宏替換是由預(yù)處理程序自動完成的。7.1.1 無參宏定義其定義的一般形式為:#define 標(biāo)識符 字符串例如: # define W (x*x+x+1) 如:#define W (x*x+x+1) main()int x,y;printf(input a number: );scanf(%d,&x);y=W*W+5*W;printf(y=%dn,y);宏定義說明:(1)宏定義是用宏名來表示一個字符串,在宏展開時又以該字符串取代宏名。字符串中可以含任何字符,可以是常數(shù),也可以是表達式,甚至可以是一個完整的語句。但應(yīng)注意的是,不能試圖將編譯預(yù)處理命令本身定義為宏。如: #define
3、D define #D PI 3.1415926 /*無法完成宏替換*/(2)預(yù)處理程序僅對程序中的宏作字符替換,而不作任何檢查。如有錯誤,只能在編譯宏展開后的源程序時發(fā)現(xiàn)。(3)宏定義不是說明或語句,因而在行末不必加分號,如加上分號則在宏展開時連同分號一起替換。宏定義說明:(4)宏定義必須寫在函數(shù)之外,其作用域為宏定義命令起到源程序結(jié)束。如果需要終止其作用域可使用#undef命令。 例如:宏定義說明:#define PI 3.14159main()# undef PIf1()(5)在函數(shù)體的字符串常量和定義過的變量名中若出現(xiàn)宏名,則編譯預(yù)處理程序不對其作宏替換。 如:宏定義說明:#defin
4、e INTNUM 32767#define s 314main()int s1=1;printf(INTNUMn );printf(%dn,s);printf(%dn,s1);運行結(jié)果:INTNUM3141(6)宏定義允許嵌套,即:在宏定義的字符串中可以使用已經(jīng)定義的宏名。在宏展開時由預(yù)處理程序?qū)訉犹鎿Q。例如:宏定義說明:#define PI 3.1415926#define S PI*r*r /* PI是已定義的宏名*/對語句: printf(%f,S);在宏替換后變?yōu)椋簆rintf(%f,3.1415926*r*r);(7)習(xí)慣上宏名用大寫字母表示,以便于與變量區(qū)別。但在語法上允許用小寫字
5、母。(8)可用宏定義表示數(shù)據(jù)類型,以便采用習(xí)慣或簡便的寫法。例如:宏定義說明:#define STU struct stu在程序中可用STU作變量說明:STU student5,*p;(9)對“輸出格式”作宏定義,可以減少書寫麻煩。宏定義說明:#define P printf#define D %dn#define F %fnmain()int a=3,b=6,c=9;float e=3.8, f=6.9,g=2.98;P(D F,a,e);P(D F,b,f);P(D F,c,g);如:帶參宏定義的一般形式為:#define 宏名(形參表) 字符串在字符串中含有形參表中列出的各個形參。帶參宏
6、調(diào)用的一般形式為:宏名(實參表);7.1.2 帶參宏定義例如: #define N(y) y*y+y+1 /*宏定義*/ T=N(5); /*宏調(diào)用*/例 7.1 帶參宏替換。#define MAX(a,b) (ab)?a:bmain()int x,y,max;printf(input two numbers:);scanf(%d%d,&x,&y);max=MAX(x,y);printf(max=%dn,max);帶參宏定義說明: (1)帶參宏定義中,宏名和形參表之間不能有空格出現(xiàn)。例如: #define MAX(a,b) (ab)?a:b如果寫成: #define MAX (a,b) (ab
7、)?a:b (2)在帶參宏定義中,形式參數(shù)不分配內(nèi)存單元,因而不必作類型定義。而宏調(diào)用中的實參有具體的值。要用它們?nèi)ヌ鎿Q形參,因而必須作類型說明。這是與函數(shù)調(diào)用時情況有所不同。在函數(shù)調(diào)用過程中,形參和實參是兩個不同的量,有不同的作用域,調(diào)用時要把實參值賦予形參,進行“值傳遞”。而在帶參宏中,只是符號替換,不存在值傳遞的問題。帶參宏定義說明: (3)在宏定義中的形參是標(biāo)識符,而宏調(diào)用中的實參可以是表達式。 例:帶參宏定義說明: #define SQ(y) (y)*(y)main()int a,sq;printf(input a number: );scanf(%d,&a);sq=SQ(a+1);
8、printf(sq=%dn,sq);(4)在宏定義中,字符串內(nèi)的形參通常要用括號括起來以避免出錯。 (5)帶參的宏和帶參函數(shù)很相似,但有本質(zhì)上的不同,除上面已談到的各點外,把同一表達式用函數(shù)處理與用宏處理兩者的結(jié)果有可能是不同的。帶參宏定義說明: (6)宏定義也可用來定義多個語句,在宏調(diào)用時,把這些語句又替換到源程序內(nèi)。 帶參宏定義說明: 例如:#define SSSV(s1,s2,s3,v) s1=l*w;s2=l*h;s3=w*h;v=w*l*h;main()int l=3,w=4,h=5,sa,sb,sc,vv;SSSV(sa,sb,sc,vv);printf(sa=%dnsb=%dns
9、c=%dnvv=%dn,sa,sb,sc,vv);返回7.2 文件包含文件包含命令行的一般形式為:#include文件名“文件包含命令的功能是:把指定的文件插入該命令行位置取代該命令行,從而把指定的文件和當(dāng)前的源程序文件連成一個源文件。文件包含命令說明:(1)包含命令中的文件名可以用雙引號括起來,也可以用尖括號括起來。但是這兩種形式是有區(qū)別的 。#includestdio.h#include使用尖括號表示在包含文件目錄中去查找(包含目錄是由用戶在設(shè)置環(huán)境時設(shè)置的),而不在源文件目錄去查找;使用雙引號則表示首先在當(dāng)前的源文件目錄中查找,若未找到才到包含目錄中去查找。 文件包含命令說明:(2) 一個include命令只能指定一個被包含文件,若有多個文件要包含,則需用多個include命令。(3) 文件包含允許嵌套,即在一個被包含的文件中又可以包含另一個文件。返回7.3 條件編譯1. 第一種形式:功能:如果標(biāo)識符已被 #define命令定義過,則對程序段1進行編譯;否則對程序段2進行編譯。 #ifdef 標(biāo)識符程序段1#else程序段2#endif/*條件編譯舉例*/ 2. 第二種形式:功能:如果標(biāo)識符未被#define命
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《紙飛機》教學(xué)實踐的突破與創(chuàng)新
- 浙江省杭州市山海聯(lián)盟2024-2025學(xué)年八年級上學(xué)期期中考試語文試題(B卷)
- 創(chuàng)新初中體育教案2024年版
- 三角形分類全解析:2024年教學(xué)新方法
- 七年級下冊期末語文測試卷(B卷)
- 探究2024:八年級上冊物理教案全新設(shè)計
- 《理想的翅膀》課件:2024年助力小微企業(yè)轉(zhuǎn)型升級
- 2024年多媒體課件評分標(biāo)準(zhǔn):助力教育現(xiàn)代化
- 第45屆世界技能大賽全國選拔賽汽車噴漆項目技術(shù)工作文件
- 科目一科目四理論考試記憶口訣-駕考實操
- 大學(xué)生辯論賽評分標(biāo)準(zhǔn)表
- 診所污水污物糞便處理方案及周邊環(huán)境
- 江蘇開放大學(xué)2023年秋《馬克思主義基本原理 060111》形成性考核作業(yè)2-實踐性環(huán)節(jié)(占過程性考核成績的30%)參考答案
- 《我是班級的主人翁》的主題班會
- 酒店安全設(shè)施及安全制度
- 近代化的早期探索與民族危機的加劇 單元作業(yè)設(shè)計
- 租賃機械設(shè)備施工方案
- 屋面融雪系統(tǒng)施工方案
- 二年級家長會語文老師課件
- 結(jié)構(gòu)加固改造之整體結(jié)構(gòu)加固教學(xué)課件
- 教堂安全風(fēng)險分級管控體系方案全套資料(2019-2020新標(biāo)準(zhǔn)完整版)
評論
0/150
提交評論