版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、 預(yù)處理命令 第9章本 章 內(nèi) 容宏定義文件包含處理條件編譯9.1 宏定義基本概念預(yù)處理命令 由ANSI C統(tǒng)一規(guī)定,不是C語言本身的組成部分。預(yù)處理的實現(xiàn)宏定義文件包含條件編譯9.1 宏定義不帶參數(shù)的宏定義一般形式: #define 標(biāo)識符 字符串例如: #define PI 3.1415926說明宏名一般用大寫字母表示,以便與變量名相區(qū)別。宏定義是用宏名代替一個字符串,只作簡單的置換,不作正確性檢查。宏定義不是C語句,不必在行末加分號。#define命令應(yīng)放在程序中函數(shù)的外面,有效范圍為定義命令之后到本源文件結(jié)束??梢杂?undef命令終止宏定義的作用域。在進行宏定義時,可以引用已定義的宏
2、名,可以層層置換。(例9.2)對程序中用雙引號括起來的字符串內(nèi)的字符,即使與宏名相同,也不進行置換。宏定義與定義變量的含義不同,不分配內(nèi)存空間。9.1 宏定義帶參數(shù)的宏定義一般形式 #define 宏名(參數(shù)表) 字符串例如: #define S(a, b) a*b area = S(2, 3);宏定義的展開:實參與虛參相對應(yīng),從左到右進行置換。例9.3:如果有語句: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 宏定義說明帶參的宏定義,在定義時,在字符串中的形式參數(shù)外面加一個括號。在宏定義時,在宏名與帶參數(shù)的括號之間不應(yīng)加空格,否則將空格以后的字符都作為替代字符串的一部分。帶參的宏定義與函數(shù)的不同函數(shù)調(diào)用時,先求出實參表達式的值,然后代入形參。而使用帶參的宏只是進行簡單的字符替換。函數(shù)調(diào)用在程序運行時處理,為形參分配臨時的內(nèi)存單元。而宏展開是在編譯時進行,不分配內(nèi)存單元,不進行值的傳遞處理,也沒有返回值的概念。函數(shù)中的實參和形參都有相應(yīng)的類型定義。而宏不存在類型問題,宏名無類型,它的參數(shù)也無類型。調(diào)用函數(shù)只可得到一個返回值,而用宏可以得到幾個結(jié)果。9.1 宏定義例
4、9.4:宏展開后源程序增長,而函數(shù)調(diào)用不使源程序變長。宏替換不占運行時間,只占編譯時間。而函數(shù)調(diào)用則占運行時間。對一些簡短的功能實現(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 文件包含處理文件包含一個源文件可以將另一個源文件的全部內(nèi)容包含進來,稱為文件包含。命令形式 #include 文件名 或 #inc
5、lude (標(biāo)準(zhǔn)方式) file1.c file2.c file1.c編譯時兩個文件作為一個源程序進行編譯,得到一個目標(biāo)文件。#includeABBA說明:一個#include命令只能指定一個被包含文件。如果文件1包含文件2,而文件2中要用到文件3的內(nèi)容,則在文件1中有: #include file3.h #include file2.h文件包含可以嵌套。 file1.c file2.c file3.c兩種文件包含形式的區(qū)別(P196)尖括號 系統(tǒng)到存放C庫函數(shù)頭文件所在的目錄中尋找要包含的文件,稱為標(biāo)準(zhǔn)方式。雙撇號 系統(tǒng)先在用戶當(dāng)前目錄中尋找要包含的文件,若找不到,再按標(biāo)準(zhǔn)方式查找。若文件不
6、在當(dāng)前目錄中,雙撇號內(nèi)可給出文件路徑。9.2 文件包含處理#include file2.c#include file3.c9.3 條件編譯條件編譯指定編譯的條件,僅對部分內(nèi)容進行編譯,稱為條件編譯。條件編譯命令的幾種形式:(1)#ifdef 標(biāo)識符程序段1#else程序段2#endif說明:#else 部分可以省略。程序段可以是語句組也可以是命令行。例如:#define DEBUG.#ifdef DEBUG printf(x=%d, x);#else printf(y=%d, y);#endif(3)#if 表達式程序段1#else程序段2#endif(2)#ifndef 標(biāo)識符程序段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. 本站所有資源如無特殊說明,都需要本地電腦安裝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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年互聯(lián)網(wǎng)+內(nèi)資股東股權(quán)投資合同
- 二零二五版智能門禁系統(tǒng)與電梯聯(lián)動工程合同3篇
- 2025年度互聯(lián)網(wǎng)企業(yè)程序員聘用合同模板
- 二零二五版環(huán)保節(jié)能設(shè)備內(nèi)部股東全部股權(quán)轉(zhuǎn)讓與產(chǎn)業(yè)升級合同3篇
- 2025年高速公路收費站車牌通行費用合同
- 二零二五年度一手房銷售顧問客戶關(guān)系管理與職責(zé)合同3篇
- 2025年度個人抵押車借款保險配套合同協(xié)議2篇
- 2025年度跨境電商財務(wù)合規(guī)代理合同3篇
- 二零二五年度出口合同履約環(huán)節(jié)的供應(yīng)鏈金融支持合同4篇
- 二零二五年度民房買賣合同解除條件合同4篇
- 人教版物理八年級下冊 專項訓(xùn)練卷 (一)力、運動和力(含答案)
- 山東省房屋市政工程安全監(jiān)督機構(gòu)人員業(yè)務(wù)能力考試題庫-中(多選題)
- 《七律二首 送瘟神》教案- 2023-2024學(xué)年高教版(2023)中職語文職業(yè)模塊
- 2024年中考語文滿分作文6篇(含題目)
- 北師大版 2024-2025學(xué)年四年級數(shù)學(xué)上冊典型例題系列第三單元:行程問題“拓展型”專項練習(xí)(原卷版+解析)
- 2023年譯林版英語五年級下冊Units-1-2單元測試卷-含答案
- Unit-3-Reading-and-thinking課文詳解課件-高中英語人教版必修第二冊
- 施工管理中的文檔管理方法與要求
- DL∕T 547-2020 電力系統(tǒng)光纖通信運行管理規(guī)程
- 種子輪投資協(xié)議
- 執(zhí)行依據(jù)主文范文(通用4篇)
評論
0/150
提交評論