




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第九章預處理命令主要任務:1.掌握宏定義的用法;2.了解文件包含的概念;3.熟練掌握文件包含命令include的用法;4.了解條件編譯的概念2023/11/251主要內(nèi)容宏定義“文件包含”處理條件編譯2023/11/252預處理命令編譯預處理:在對源程序進行編譯之前,先對源程序中的編譯預處理命令進行處理;然后再將處理的結果,和源程序一起進行編譯,以得到目標代碼。C提供的預處理功能:宏定義文件包含條件編譯2023/11/253一、宏定義不帶參數(shù)的宏定義
#define標識符字符串“define”為宏定義命令;“標識符”為所定義的宏名,通常用大寫字母表示,以便于與變量區(qū)別;“字符串”可以是常數(shù)、表達式、格式串等。當是一個常量時,則相應的“宏名”就是一個符號常量。2023/11/254例:輸入圓的半徑,求圓的周長、面積和球的體積。要求使用無參宏定義圓周率。#include<stdio.h>#definePI3.1415926/*PI是宏名,3.1415926用來替換宏名的常數(shù)*/voidmain(){floatr,l,s,v;
printf("Inputar:");
scanf("%f",&r);l=2*PI*r; /*引用無參宏求周長*/s=PI*r*r; /*引用無參宏求面積*/v=PI*r*r*r*3/4; /*引用無參宏求體積*/
printf("length=%.2f,area=%.2f,volume=%.2f\n",l,s,v);}一、宏定義2023/11/255一、宏定義說明宏名一般用大寫字母表示,以便與變量區(qū)別。在宏展開時,預處理程序僅以按宏定義簡單替換宏名,而不作任何檢查。如果有錯誤,只能由編譯程序在編譯宏展開后的源程序時發(fā)現(xiàn)。宏定義不是C語句,所以不能在行尾加分號。否則,宏展開時,會將分號作為字符串的1個字符,用于替換宏名。2023/11/256一、宏定義說明宏定義命令#define出現(xiàn)在函數(shù)的外部,宏名的有效范圍是:從定義命令之后,到本文件結束。通常,宏定義命令放在文件開頭處??梢杂?undef命令終止宏定義的作用域在進行宏定義時,可以引用已定義的宏名。2023/11/257一、宏定義說明對雙引號括起來的字符串內(nèi)的字符,即使與宏名同名,也不進行宏展開。宏定義只作字符替換,不分配內(nèi)存空間使用宏定義的優(yōu)點可提高源程序的可維護性可提高源程序的可移植性減少源程序中重復書寫字符串的工作量2023/11/258一、宏定義帶參數(shù)的宏定義
#define宏名(形式參數(shù)表)
字符串調(diào)用格式:宏名(實參表)宏展開:用宏調(diào)用提供的實參字符串,直接置換宏定義命令行中相應形參字符串,非形參字符保持不變。P207例9.32023/11/259一、宏定義說明有參宏的展開,只是將實參作為字符串,簡單地置換形參字符串,而不做任何語法檢查。若定義:#defineS(r)PI*r*r則語句:area=S(a+b)替換后為area=PI*a+b*a+b要得到area=PI*(a+b)*(a+b),需定義為:#defineS(r)PI*(r)*(r)定義有參宏時,宏名與左圓括號之間不能留有空格。否則,C編譯系統(tǒng)將空格以后的所有字符均作為替代字符串,而將該宏視為無參宏。2023/11/2510一、宏定義有參宏與有參函數(shù)比較調(diào)用有參函數(shù)時,是先求出實參值,然后再代入形參。而展開有參宏時,只是將實參簡單地置換形參。調(diào)用有參函數(shù),在程序運行時處理,為形參分配臨時的內(nèi)存單元。而宏展開在編譯前進行,不分配內(nèi)存單元,不進行值傳遞,不返回值。函數(shù)無論調(diào)用多少次,都不會使目標程序變長,但每次調(diào)用都要占用系統(tǒng)時間進行調(diào)用現(xiàn)場保護和現(xiàn)場恢復;宏展開不占運行時間,但是每引用1次,都會使目標程序增大1次。2023/11/2511一、宏定義有參宏與有參函數(shù)比較在有參函數(shù)中,形參是有類型的,而且要求實參的類型與其一致;而在有參宏中,形參沒有類型信息,只是一個符號代表,因此可以是任何類型。函數(shù)調(diào)用只能得到一個返回值,而用宏可以設法得到幾個結果。2023/11/2512二、文件包含文件包含:一個源文件可以將另一個源文件的全部內(nèi)容包含進來。格式:#include“包含文件名”
或
#include<包含文件名>兩種格式的區(qū)別在于:使用雙引號:系統(tǒng)首先到當前目錄下查找被包含文件,如果沒找到,再到系統(tǒng)指定的“包含文件目錄”(由用戶在配置環(huán)境時設置)去查找。使用尖括號:直接到系統(tǒng)指定的“包含文件目錄”去查找。一般地說,使用雙引號比較保險。2023/11/2513二、文件包含文件包含的優(yōu)點:
一個大程序,通常分為多個模塊,并由多個程序員分別編程。有了文件包含處理功能,就可以將多個模塊共用的數(shù)據(jù)(如符號常量和數(shù)據(jù)結構)或函數(shù),集中到一個單獨的文件中。這樣,凡是要使用其中數(shù)據(jù)或調(diào)用其中函數(shù)的程序員,只要使用文件包含處理功能,將所需文件包含進來即可,不必再重復定義它們,從而減少重復勞動。2023/11/2514二、文件包含說明:一條包含命令,只能指定一個被包含文件。如果要包含n個文件,則要用n條包含命令。編譯預處理時,預處理程序?qū)⒉檎抑付ǖ谋话募?,并將其復制?include命令出現(xiàn)的位置上。文件包含可以嵌套,即被包含文件中又包含另一個文件。2023/11/2515三、條件編譯條件編譯:程序中一部分內(nèi)容只在滿足一定條件時才進行編譯,即對這一部分內(nèi)容指定編譯的條件作用:可有效地提高程序的可移植性,并廣泛地應用在商業(yè)軟件中,為一個程序提供各種不同的版本。2023/11/2516三、條件編譯
#ifdef
標識符程序段1;
[#else
程序段2;]
#endif功能:當“標識符”已經(jīng)被#define命令定義過,則編譯程序段1,否則編譯程序段2。2023/11/2517三、條件編譯
#ifndef
標識符程序段1;
[#else
程序段2;]
#endif功能:與第一種形式的作用相反,若“標識符”未被#define命令定義過,則編譯程序段1,否則編譯程序段2。2023/11/2518三、條件編譯
#if表達式程序段1;
[#else
程序段2;]
#
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 嵌入式開發(fā)項目管理的小技巧試題及答案
- 電動機經(jīng)營權轉(zhuǎn)讓合同書(15篇)
- 食堂承包合同協(xié)議書范本(18篇)
- 特色農(nóng)產(chǎn)品種植與銷售合同協(xié)議
- 計算機四級嵌入式項目經(jīng)驗的試題及答案
- 人力資源委托咨詢服務合同協(xié)議書
- 不斷進取計算機二級VFP試題及答案
- 法律學民法原理與實踐試題集
- 監(jiān)理師考試中的考生素養(yǎng)與個人發(fā)展研究試題及答案
- 認真對待2025年信息系統(tǒng)監(jiān)理師考試試題及答案
- 人民調(diào)解員培訓課件
- 激光切割軟件lasercad說明書
- 慢阻肺的中醫(yī)康復課件講義
- DB33T 2288-2020 淡水池塘養(yǎng)殖尾水處理技術規(guī)范
- 民用醇基液體燃料應用技術規(guī)程DB50-T 1279-2022
- 義務教育數(shù)學課程標準(2022年版)測試題
- 運動技能學習與控制課件第四章感覺系統(tǒng)對運動控制的作用
- QES三體系內(nèi)審檢查表 含審核記錄
- 安裝施工進度計劃表-樣表
- 磚砌體工程質(zhì)量標準及檢驗方法
- 大體積混凝土測溫記錄表格(有范例)
評論
0/150
提交評論