C語言 編譯預(yù)處理.ppt_第1頁
C語言 編譯預(yù)處理.ppt_第2頁
C語言 編譯預(yù)處理.ppt_第3頁
C語言 編譯預(yù)處理.ppt_第4頁
C語言 編譯預(yù)處理.ppt_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第10章 編譯預(yù)處理,編譯預(yù)處理,文件包含 宏定義 條件編譯,10.1 文件包含,命令的一般形式 格式1: #include 格式2: #include 文件名,文件包含是將指定的某個(gè)源文件的內(nèi)容全部包含到當(dāng)前文件中。用include命令實(shí)現(xiàn)。,格式1:預(yù)處理程序僅在C所在目錄下查找指定文件 格式2:預(yù)處理程序首先在當(dāng)前目錄中查找指定文件 若找不到再到C所在目錄中查找。,#define 宏名 字符串,宏定義的功能: 在進(jìn)行編譯前,用字符串原樣替換程序中的宏名。 這個(gè)替換過程稱為“宏替換”或“宏展開”,字符串也稱為替換文本。,一般格式:,10.2 不帶參數(shù)的宏定義,#define PI 3.14

2、 #define S PI*r*r #define V 4*S*r/3 main( ) float r; printf(nInput r:); scanf(%f, ,宏定義的作用域是從定義處開始到源文件結(jié)束, 但根據(jù)需要可用undef命令終止其作用域。形式為:,#undef 宏名,#define YES 1 main() printf(%d,YES); max(); #undef YES #define YES 0 max() printf(%d,YES); ,定義形式:,#define 宏名(形參表) 字符串,功能: 用宏名后圓括號(hào)中的實(shí)參替換字符串中的形參 把源程序中所有帶參數(shù)的宏名用宏定

3、義中的字符串替換,10.3 帶參數(shù)的宏定義,不能加空格,#define S(a,b) a*b . area=S(3,2); 宏展開: area=3*2;,引用形式:,宏名(實(shí)參表),#define S (r) PI*r*r 相當(dāng)于定義了不帶參宏S,代表字符串“(r) PI*r*r”,例: #define POWER(x) x*x x=4; y=6; z=POWER(x+y); 宏展開: z=x+y*x+y; 一般寫成: #define POWER(x) (x)*(x) 宏展開:z=(x+y)*(x+y);,形參用實(shí)參換,其它字符保留, 宏體及各形參外一般應(yīng)加括號(hào)(),練習(xí): #define M

4、A(x) x*(x-1) main( ) int a=1,b=2; printf(%dn, MA(1+a+b); ,輸出結(jié)果:8,注意:帶參數(shù)的宏定義與函數(shù)是不同的!,函數(shù)調(diào)用是在運(yùn)行時(shí)處理的,先求表達(dá)式的值,然后代入臨時(shí)分配的形參, 有類型問題有返回值。 函數(shù)調(diào)用不改變?cè)闯绦颉?宏展開則是在預(yù)編譯時(shí)進(jìn)行的,只將實(shí)參字符置換對(duì)應(yīng)的形參,不分配單元,不進(jìn)行值的傳遞,沒有類型問題, 也無返回值的概念。 宏展開后源程序發(fā)生變化。 本質(zhì)上宏展開僅僅是字符序列的替換,由編譯系統(tǒng)對(duì)替換后字符序列進(jìn)行解釋和語法檢查,只占編譯時(shí)間。,格式1: #ifdef 標(biāo)識(shí)符 程序段 1 #else 程序段 2 #end

5、if,10.4 條件編譯,若所指定的標(biāo)識(shí)符已經(jīng)被#define定義,則編譯程序段1,否則編譯程序段2,#include #define MA 1 main( ) int a=10; #ifdef MA a=a-10; printf(%dn,a); #else a=a+10; printf(%dn,a); #endif ,輸出結(jié)果:0,0,10.4 條件編譯,格式2: #ifndef 標(biāo)識(shí)符 程序段 1 #else 程序段 2 #endif,若所指定的標(biāo)識(shí)符未被#define定義,則編譯程序段1,否則編譯程序段2,#include #define MA 1 main( ) int a=10; #ifndef MA a=a-10; printf(%dn,a); #else a=a+10; printf(%dn,a); #endif ,輸出結(jié)果:20,/#define MA 1,輸出結(jié)果:0,10.4 條件編譯,格式3: #if 常量表達(dá)式 程序段 1 #else 程序段 2 #endif,若常量表達(dá)式非0,則編譯程序段1,否則編譯程序段2,#include #define LE

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論