《C語言程序設(shè)計》課件4第13章_第1頁
《C語言程序設(shè)計》課件4第13章_第2頁
《C語言程序設(shè)計》課件4第13章_第3頁
《C語言程序設(shè)計》課件4第13章_第4頁
《C語言程序設(shè)計》課件4第13章_第5頁
已閱讀5頁,還剩40頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第13章編譯預(yù)處理13.1概述13.2宏定義13.3文件包含13.4條件編譯

13.1概述

在前面各章內(nèi)容中,曾多次使用過以“#”開頭的命令。如文件包含命令#include、宏定義命令#define等。在C語言程序設(shè)計中,這些以“#”開頭的命令一般放在函數(shù)之外,而且通常放在源文件的前面,被稱為預(yù)處理命令。

13.2宏定義

13.2.1無參宏定義

無參宏定義是用一個指定的標(biāo)識符(名字)來代表一個字符串的,在實際軟件開發(fā)過程中有非常廣泛的應(yīng)用。

無參宏定義的一般形式可表示為:

#define標(biāo)識符字符串

【例13-1】已知半徑,求對應(yīng)圓的周長、面積和球的體積。

解析:定義變量r表示圓的半徑,圓的周長、面積和體積分別用變量c,s,v表示,則程序源代碼可這樣來寫:圖13.1例13-1運(yùn)行結(jié)果這種宏定義在大型程序開發(fā)過程中有諸多優(yōu)點:

(1)提高程序的可讀性。

(2)可以極大地方便程序的修改。

(3)用宏名來代替字符串,可以減少程序輸入過程中重復(fù)輸入的某些字符串。

1.宏定義替換表達(dá)式或字符串

【例13-2】宏替換實例。圖13.2例13-2運(yùn)行結(jié)果

【例13-3】宏定義替換字符串的實例。圖13.3例13-3運(yùn)行結(jié)果

2.用#undef宏定義作用域

【例13-4】宏定義作用域的實例。

3.宏名用引號括起來的情況

【例13-5】宏的使用實例。

4.宏定義允許嵌套

在宏定義的字符串中可以使用已經(jīng)定義的宏名。在宏展開時由預(yù)處理程序?qū)訉哟鷵Q。例如:

#definePI3.1415926

#defineSPI*y*y /*PI是已定義的宏名*/

語句:

printf(“%f”,S);

在宏代換后變?yōu)椋?/p>

printf("%f",3.1415926*y*y);

5.用宏定義表示數(shù)據(jù)類型

例如:

#defineSTUstructstu

在程序中可用STU作變量說明:

STUbody[5],*p;

#defineINTEGERint

在程序中即可用INTEGER作整型變量說明:

INTEGERa,b;13.2.2帶參宏定義

C語言允許宏定義時帶有參數(shù),我們將這種形式的宏定義稱為帶參宏定義。在宏定義中的參數(shù)稱為形式參數(shù),在宏調(diào)用中的參數(shù)稱為實際參數(shù)。

對帶參數(shù)的宏,在調(diào)用中不僅要進(jìn)行宏展開,而且要用實參去代換形參。

帶參數(shù)的宏定義不是進(jìn)行簡單的字符串置換,一般情況下還要進(jìn)行參數(shù)置換,其通用的表達(dá)形式為:

#define宏名(形參表)字符串

1.帶參宏定義應(yīng)用示例

【例13-6】帶參宏實例。圖13.4例13-6運(yùn)行結(jié)果

【例13-7】帶參宏實例1。圖13.5例13-7運(yùn)行結(jié)果

【例13-8】帶參宏實例2。圖13.6例13-8運(yùn)行結(jié)果

【例13-9】帶參宏實例3。圖13.7例13-9運(yùn)行結(jié)果

【例13-10】帶參宏實例4。圖13.8例13-10運(yùn)行結(jié)果

2.帶參的宏定義和帶參函數(shù)的區(qū)別

【例13-11】函數(shù)處理實例。圖13.9例13-11運(yùn)行結(jié)果

【例13-12】宏處理實例。圖13.10例13-12運(yùn)行結(jié)果

【例13-13】宏定義實例。圖13.11例13-13運(yùn)行結(jié)果

13.3文件包含

文件包含是C語言預(yù)處理程序的另一個重要功能。它指一個源文件可以將另外一個源文件全部內(nèi)容包含進(jìn)來,也就是將其它文件包含到本文件之中,C語言提供了“#include”命令來實現(xiàn)文件包含。文件包含命令行的一般形式為:

#include“文件名”

在前面我們已多次用此命令包含過庫函數(shù)的頭文件。例如:

#include“stdio.h”

#include"math.h"圖13.12文件包含原理圖

【例13-14】將格式宏做成頭文件,把它包含到用戶程序中。

(1)將格式宏制作成頭文件format.h。

(2)將頭文件format.h包含到主文件中。

13.4條件編譯

(1)第一種形式:它的功能是:如果標(biāo)識符已被#define命令定義過,則對程序段1進(jìn)行編譯;否則對程序段2進(jìn)行編譯。如果沒有程序段2(它為空),本格式中的#else可以沒有,即可以寫為:

#ifdef標(biāo)識符

程序段

#endif

【例13-15】條件編譯實例。圖13.13例13-15的運(yùn)行結(jié)果

(2)第二種形式:

#ifndef標(biāo)識符

程序段1

#else

程序段2

#endif

(3)第三種形式:

#if常量表達(dá)式

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論