C語(yǔ)言程序設(shè)計(jì) 第09章 預(yù)處理命令_第1頁(yè)
C語(yǔ)言程序設(shè)計(jì) 第09章 預(yù)處理命令_第2頁(yè)
C語(yǔ)言程序設(shè)計(jì) 第09章 預(yù)處理命令_第3頁(yè)
C語(yǔ)言程序設(shè)計(jì) 第09章 預(yù)處理命令_第4頁(yè)
C語(yǔ)言程序設(shè)計(jì) 第09章 預(yù)處理命令_第5頁(yè)
已閱讀5頁(yè),還剩8頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、 預(yù)處理命令 第9章本 章 內(nèi) 容宏定義文件包含處理?xiàng)l件編譯9.1 宏定義基本概念預(yù)處理命令 由ANSI C統(tǒng)一規(guī)定,不是C語(yǔ)言本身的組成部分。預(yù)處理的實(shí)現(xiàn)宏定義文件包含條件編譯9.1 宏定義不帶參數(shù)的宏定義一般形式: #define 標(biāo)識(shí)符 字符串例如: #define PI 3.1415926說(shuō)明宏名一般用大寫字母表示,以便與變量名相區(qū)別。宏定義是用宏名代替一個(gè)字符串,只作簡(jiǎn)單的置換,不作正確性檢查。宏定義不是C語(yǔ)句,不必在行末加分號(hào)。#define命令應(yīng)放在程序中函數(shù)的外面,有效范圍為定義命令之后到本源文件結(jié)束??梢杂?undef命令終止宏定義的作用域。在進(jìn)行宏定義時(shí),可以引用已定義的宏

2、名,可以層層置換。(例9.2)對(duì)程序中用雙引號(hào)括起來(lái)的字符串內(nèi)的字符,即使與宏名相同,也不進(jìn)行置換。宏定義與定義變量的含義不同,不分配內(nèi)存空間。9.1 宏定義帶參數(shù)的宏定義一般形式 #define 宏名(參數(shù)表) 字符串例如: #define S(a, b) a*b area = S(2, 3);宏定義的展開:實(shí)參與虛參相對(duì)應(yīng),從左到右進(jìn)行置換。例9.3:如果有語(yǔ)句:area = S(a+b);分析程序正誤?#define PI 3.1415926#define S(r) PI*r*rmain() float a, area; a = 3.6; area = S(a); printf(%f,

3、%f, a, area); 9.1 宏定義說(shuō)明帶參的宏定義,在定義時(shí),在字符串中的形式參數(shù)外面加一個(gè)括號(hào)。在宏定義時(shí),在宏名與帶參數(shù)的括號(hào)之間不應(yīng)加空格,否則將空格以后的字符都作為替代字符串的一部分。帶參的宏定義與函數(shù)的不同函數(shù)調(diào)用時(shí),先求出實(shí)參表達(dá)式的值,然后代入形參。而使用帶參的宏只是進(jìn)行簡(jiǎn)單的字符替換。函數(shù)調(diào)用在程序運(yùn)行時(shí)處理,為形參分配臨時(shí)的內(nèi)存單元。而宏展開是在編譯時(shí)進(jìn)行,不分配內(nèi)存單元,不進(jìn)行值的傳遞處理,也沒有返回值的概念。函數(shù)中的實(shí)參和形參都有相應(yīng)的類型定義。而宏不存在類型問題,宏名無(wú)類型,它的參數(shù)也無(wú)類型。調(diào)用函數(shù)只可得到一個(gè)返回值,而用宏可以得到幾個(gè)結(jié)果。9.1 宏定義例

4、9.4:宏展開后源程序增長(zhǎng),而函數(shù)調(diào)用不使源程序變長(zhǎng)。宏替換不占運(yùn)行時(shí)間,只占編譯時(shí)間。而函數(shù)調(diào)用則占運(yùn)行時(shí)間。對(duì)一些簡(jiǎn)短的功能實(shí)現(xiàn),用宏和函數(shù)都可以。例9.5(略)#define PI 3.1415926#define CIRCLE(R, L, S) L=2*PI*R; S=PI*R*Rmain() float r, l; scanf(%f, &r); CIRCLE(r, l); printf(%6.2f, %6.2f, %6.2f, r, l, s); 9.2 文件包含處理文件包含一個(gè)源文件可以將另一個(gè)源文件的全部?jī)?nèi)容包含進(jìn)來(lái),稱為文件包含。命令形式 #include 文件名 或 #inc

5、lude (標(biāo)準(zhǔn)方式) file1.c file2.c file1.c編譯時(shí)兩個(gè)文件作為一個(gè)源程序進(jìn)行編譯,得到一個(gè)目標(biāo)文件。#includeABBA說(shuō)明:一個(gè)#include命令只能指定一個(gè)被包含文件。如果文件1包含文件2,而文件2中要用到文件3的內(nèi)容,則在文件1中有: #include file3.h #include file2.h文件包含可以嵌套。 file1.c file2.c file3.c兩種文件包含形式的區(qū)別(P196)尖括號(hào) 系統(tǒng)到存放C庫(kù)函數(shù)頭文件所在的目錄中尋找要包含的文件,稱為標(biāo)準(zhǔn)方式。雙撇號(hào) 系統(tǒng)先在用戶當(dāng)前目錄中尋找要包含的文件,若找不到,再按標(biāo)準(zhǔn)方式查找。若文件不

6、在當(dāng)前目錄中,雙撇號(hào)內(nèi)可給出文件路徑。9.2 文件包含處理#include file2.c#include file3.c9.3 條件編譯條件編譯指定編譯的條件,僅對(duì)部分內(nèi)容進(jìn)行編譯,稱為條件編譯。條件編譯命令的幾種形式:(1)#ifdef 標(biāo)識(shí)符程序段1#else程序段2#endif說(shuō)明:#else 部分可以省略。程序段可以是語(yǔ)句組也可以是命令行。例如:#define DEBUG.#ifdef DEBUG printf(x=%d, x);#else printf(y=%d, y);#endif(3)#if 表達(dá)式程序段1#else程序段2#endif(2)#ifndef 標(biāo)識(shí)符程序段1#else程序段2#endif9.3 條件編譯9.3 條件編譯#define LETTER 1main() char str20 = C Language, c; int i; i = 0; while(c=stri) !=0) i+; #if LETTER if(c

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論