




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
預(yù)處理指令講師:李南江預(yù)處理指令簡介C語言在對源程序進(jìn)行編譯之前,會(huì)先對一些特殊的預(yù)處理指令作解釋(比如之前使用的#include文件包含指令),產(chǎn)生一個(gè)新的源程序(這個(gè)過程稱為編譯預(yù)處理),之后再進(jìn)行通常的編譯為了區(qū)分預(yù)處理指令和一般的C語句,所有預(yù)處理指令都以符號(hào)“#”開頭,并且結(jié)尾不用分號(hào)預(yù)處理指令可以出現(xiàn)在程序的任何位置,它的作用范圍是從它出現(xiàn)的位置到文件尾。習(xí)慣上我們盡可能將預(yù)處理指令寫在源程序開頭,這種情況下,它的作用范圍就是整個(gè)源程序文件C語言提供的預(yù)處理指令主要有:宏定義、文件包含、條件編譯宏定義分類宏定義可以分為2種:不帶參數(shù)的宏定義帶參數(shù)的宏定義一、不帶參數(shù)的宏定義1.一般形式#define宏名
字符串比如
#defineABC10右邊的字符串也可以省略,比如#defineABC2.作用它的作用是在編譯預(yù)處理時(shí),將源程序中所有"宏名"替換成右邊的"字符串",常用來定義常量。接下來寫個(gè)程序根據(jù)圓的半徑計(jì)算周長宏定義#include<stdio.h>
//源程序中所有的宏名PI在編譯預(yù)處理的時(shí)候都會(huì)被3.14所代替#definePI3.14
//根據(jù)圓的半徑計(jì)radius算周長floatgirth(floatradius){return2*PI*radius;}
intmain(){floatg=girth(2);
printf("周長為:%f",g);return0;}在第4行定義了一個(gè)叫PI的宏,在編譯預(yù)處理之后,第8行中的2*PI*radius就會(huì)變成2*3.14*radius。3.使用習(xí)慣與注意1>宏名一般用大寫字母,以便與變量名區(qū)別開來,但用小寫也沒有語法錯(cuò)誤2>對程序中用雙引號(hào)擴(kuò)起來的字符串內(nèi)的字符,不進(jìn)行宏的替換操作。比如:#defineR10intmain(){char*s="Radio";return0;}在第1行定義了一個(gè)叫R的宏,但是第4行中"Radio"里面的'R'并不會(huì)被替換成103>在編譯預(yù)處理用字符串替換宏名時(shí),不作語法檢查,只是簡單的字符串替換。只有在編譯的時(shí)候才對已經(jīng)展開宏名的源程序進(jìn)行語法檢查#defineI100intmain(){inti[3]=I;return0;}4>宏名的有效范圍是從定義位置到文件結(jié)束。如果需要終止宏定義的作用域,可以用#undef命令#definePI3.14/*....*/#undefPIPI這個(gè)宏在第1行到第8行之間是有效的,第8行后就無效了5>定義一個(gè)宏時(shí)可以引用已經(jīng)定義的宏名#defineR3.0#definePI3.14#defineL2*PI*R#defineSPI*R*R帶參數(shù)的宏定義#define宏名(參數(shù)列表)字符串2.作用在編譯預(yù)處理時(shí),將源程序中所有宏名替換成字符串,并且將字符串中的參數(shù)用宏名右邊參數(shù)列表中的參數(shù)替換.#include<stdio.h>
#defineaverage(a,b)(a+b)/2
intmain(){inta=average(10,4);
printf("平均值:%d",a);return0;}第3行中定義了一個(gè)帶有2個(gè)參數(shù)的宏average,第7行其實(shí)會(huì)被替換成:int
a=(10+
4)/2;,輸出結(jié)果為:7是不是感覺這個(gè)宏有點(diǎn)像函數(shù)呢?3.使用注意1>宏名和參數(shù)列表之間不能有空格,否則空格后面的所有字符串都作為替換的字符串.#defineaverage(a,b)(a+b)/2
intmain(){inta=average(10,4);return0;}注意第1行的宏定義,宏名average跟(a,b)之間是有空格的,于是,第5行就變成了這樣:inta=(a,b)(a+b)/2(10,4);這個(gè)肯定是編譯不通過的帶參數(shù)的宏在展開時(shí),只作簡單的字符和參數(shù)的替換,不進(jìn)行任何計(jì)算操作。所以在定義宏時(shí),一般用一個(gè)小括號(hào)括住字符串的參數(shù)。下面定義一個(gè)宏D(a),作用是返回a的2倍數(shù)值:如果定義宏的時(shí)候不用小括號(hào)括住參數(shù)#include<stdio.h>
#defineD(a)2*a
intmain(){intb=D(3+4);
printf("%d",b);return0;}第7行將被替換成int
b=2*3+4;,輸出結(jié)果10,如果定義宏的時(shí)候用小括號(hào)括住參數(shù),把上面的第3行改成:#defineD(a)2*(a),注意右邊的a是有括號(hào)的,第7行將被替換成int
b=2*(3+4);,輸出結(jié)果14計(jì)算結(jié)果最好也用括號(hào)括起來下面定義一個(gè)宏P(guān)(a),作用是返回a的平方:如果不用小括號(hào)括住計(jì)算結(jié)果#include<stdio.h>#definePow(a)(a)*(a)intmain(intargc,constchar*argv[])
{intb=Pow(10)/Pow(2);
printf("%d",b);return0;}注意第3行,沒有用小括號(hào)擴(kuò)住計(jì)算結(jié)果,只是括住了參數(shù)而已。第6行代碼被替換為:intb=(10)*(10)/(2)*(2);簡化之后:int
b=10*(10/2)*2;,最后變量b為:100如果用小括號(hào)括住計(jì)算結(jié)果將上面的第3行代碼改為:#definePow(a)((a)*(a))那么第6行被替換為:intb=((10)*(10))/((2)*(2));簡化之后:int
b=(10*10)/(2*2);,最后輸出結(jié)果:255.與函數(shù)的區(qū)別1.從
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公共交通工具安全防護(hù)方案計(jì)劃
- 生物觀察實(shí)踐活動(dòng)方案計(jì)劃
- 倉庫作業(yè)效率提升的案例分析計(jì)劃
- 肺癌合并肺栓塞護(hù)理
- 未來市場的年度工作應(yīng)對策略計(jì)劃
- 《貴州萬勝恒通礦業(yè)有限責(zé)任公司習(xí)水縣溫水鎮(zhèn)吉華煤礦(變更)礦產(chǎn)資源綠色開發(fā)利用方案(三合一)》評(píng)審意見
- 木林森品牌新形象
- Definitiontheability(英文版知識(shí)講義)
- 儲(chǔ)能鋰電池知識(shí)培訓(xùn)課件
- 內(nèi)蒙古開魯縣高中生物 第四章 細(xì)胞的物質(zhì)輸入和輸出 4.1 物質(zhì)跨膜運(yùn)輸?shù)膶?shí)例 第一課時(shí)教學(xué)實(shí)錄 新人教版必修1
- 四年級(jí)下冊英語課件:Unit 4 There are seven days in a week-Lesson 19人教精通版
- DB63-T 2033-2022 青海省農(nóng)房建筑節(jié)能建設(shè)標(biāo)準(zhǔn)
- 《橋梁工程計(jì)算書》word版
- 中華人民共和國特種設(shè)備安全法(節(jié)選)
- 籃球比賽計(jì)分表
- 施工現(xiàn)場安全隱患檢查(附標(biāo)準(zhǔn)規(guī)范)
- 吞咽障礙及吞咽功能的評(píng)定
- 拱涵計(jì)算書-6.0m-1m
- 高中有機(jī)化學(xué)必修模塊與選修模塊的銜接
- BBC美麗中國英文字幕
- 《自然保護(hù)區(qū)綜合科學(xué)考察規(guī)程》
評(píng)論
0/150
提交評(píng)論