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

下載本文檔

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

文檔簡(jiǎn)介

第九章預(yù)處理命令主要任務(wù):1.掌握宏定義的用法;2.了解文件包含的概念;3.熟練掌握文件包含命令include的用法;4.了解條件編譯的概念2023/11/251主要內(nèi)容宏定義“文件包含”處理?xiàng)l件編譯2023/11/252預(yù)處理命令編譯預(yù)處理:在對(duì)源程序進(jìn)行編譯之前,先對(duì)源程序中的編譯預(yù)處理命令進(jìn)行處理;然后再將處理的結(jié)果,和源程序一起進(jìn)行編譯,以得到目標(biāo)代碼。C提供的預(yù)處理功能:宏定義文件包含條件編譯2023/11/253一、宏定義不帶參數(shù)的宏定義

#define標(biāo)識(shí)符字符串“define”為宏定義命令;“標(biāo)識(shí)符”為所定義的宏名,通常用大寫(xiě)字母表示,以便于與變量區(qū)別;“字符串”可以是常數(shù)、表達(dá)式、格式串等。當(dāng)是一個(gè)常量時(shí),則相應(yīng)的“宏名”就是一個(gè)符號(hào)常量。2023/11/254例:輸入圓的半徑,求圓的周長(zhǎng)、面積和球的體積。要求使用無(wú)參宏定義圓周率。#include<stdio.h>#definePI3.1415926/*PI是宏名,3.1415926用來(lái)替換宏名的常數(shù)*/voidmain(){floatr,l,s,v;

printf("Inputar:");

scanf("%f",&r);l=2*PI*r; /*引用無(wú)參宏求周長(zhǎng)*/s=PI*r*r; /*引用無(wú)參宏求面積*/v=PI*r*r*r*3/4; /*引用無(wú)參宏求體積*/

printf("length=%.2f,area=%.2f,volume=%.2f\n",l,s,v);}一、宏定義2023/11/255一、宏定義說(shuō)明宏名一般用大寫(xiě)字母表示,以便與變量區(qū)別。在宏展開(kāi)時(shí),預(yù)處理程序僅以按宏定義簡(jiǎn)單替換宏名,而不作任何檢查。如果有錯(cuò)誤,只能由編譯程序在編譯宏展開(kāi)后的源程序時(shí)發(fā)現(xiàn)。宏定義不是C語(yǔ)句,所以不能在行尾加分號(hào)。否則,宏展開(kāi)時(shí),會(huì)將分號(hào)作為字符串的1個(gè)字符,用于替換宏名。2023/11/256一、宏定義說(shuō)明宏定義命令#define出現(xiàn)在函數(shù)的外部,宏名的有效范圍是:從定義命令之后,到本文件結(jié)束。通常,宏定義命令放在文件開(kāi)頭處??梢杂?undef命令終止宏定義的作用域在進(jìn)行宏定義時(shí),可以引用已定義的宏名。2023/11/257一、宏定義說(shuō)明對(duì)雙引號(hào)括起來(lái)的字符串內(nèi)的字符,即使與宏名同名,也不進(jìn)行宏展開(kāi)。宏定義只作字符替換,不分配內(nèi)存空間使用宏定義的優(yōu)點(diǎn)可提高源程序的可維護(hù)性可提高源程序的可移植性減少源程序中重復(fù)書(shū)寫(xiě)字符串的工作量2023/11/258一、宏定義帶參數(shù)的宏定義

#define宏名(形式參數(shù)表)

字符串調(diào)用格式:宏名(實(shí)參表)宏展開(kāi):用宏調(diào)用提供的實(shí)參字符串,直接置換宏定義命令行中相應(yīng)形參字符串,非形參字符保持不變。P207例9.32023/11/259一、宏定義說(shuō)明有參宏的展開(kāi),只是將實(shí)參作為字符串,簡(jiǎn)單地置換形參字符串,而不做任何語(yǔ)法檢查。若定義:#defineS(r)PI*r*r則語(yǔ)句:area=S(a+b)替換后為area=PI*a+b*a+b要得到area=PI*(a+b)*(a+b),需定義為:#defineS(r)PI*(r)*(r)定義有參宏時(shí),宏名與左圓括號(hào)之間不能留有空格。否則,C編譯系統(tǒng)將空格以后的所有字符均作為替代字符串,而將該宏視為無(wú)參宏。2023/11/2510一、宏定義有參宏與有參函數(shù)比較調(diào)用有參函數(shù)時(shí),是先求出實(shí)參值,然后再代入形參。而展開(kāi)有參宏時(shí),只是將實(shí)參簡(jiǎn)單地置換形參。調(diào)用有參函數(shù),在程序運(yùn)行時(shí)處理,為形參分配臨時(shí)的內(nèi)存單元。而宏展開(kāi)在編譯前進(jìn)行,不分配內(nèi)存單元,不進(jìn)行值傳遞,不返回值。函數(shù)無(wú)論調(diào)用多少次,都不會(huì)使目標(biāo)程序變長(zhǎng),但每次調(diào)用都要占用系統(tǒng)時(shí)間進(jìn)行調(diào)用現(xiàn)場(chǎng)保護(hù)和現(xiàn)場(chǎng)恢復(fù);宏展開(kāi)不占運(yùn)行時(shí)間,但是每引用1次,都會(huì)使目標(biāo)程序增大1次。2023/11/2511一、宏定義有參宏與有參函數(shù)比較在有參函數(shù)中,形參是有類(lèi)型的,而且要求實(shí)參的類(lèi)型與其一致;而在有參宏中,形參沒(méi)有類(lèi)型信息,只是一個(gè)符號(hào)代表,因此可以是任何類(lèi)型。函數(shù)調(diào)用只能得到一個(gè)返回值,而用宏可以設(shè)法得到幾個(gè)結(jié)果。2023/11/2512二、文件包含文件包含:一個(gè)源文件可以將另一個(gè)源文件的全部?jī)?nèi)容包含進(jìn)來(lái)。格式:#include“包含文件名”

#include<包含文件名>兩種格式的區(qū)別在于:使用雙引號(hào):系統(tǒng)首先到當(dāng)前目錄下查找被包含文件,如果沒(méi)找到,再到系統(tǒng)指定的“包含文件目錄”(由用戶(hù)在配置環(huán)境時(shí)設(shè)置)去查找。使用尖括號(hào):直接到系統(tǒng)指定的“包含文件目錄”去查找。一般地說(shuō),使用雙引號(hào)比較保險(xiǎn)。2023/11/2513二、文件包含文件包含的優(yōu)點(diǎn):

一個(gè)大程序,通常分為多個(gè)模塊,并由多個(gè)程序員分別編程。有了文件包含處理功能,就可以將多個(gè)模塊共用的數(shù)據(jù)(如符號(hào)常量和數(shù)據(jù)結(jié)構(gòu))或函數(shù),集中到一個(gè)單獨(dú)的文件中。這樣,凡是要使用其中數(shù)據(jù)或調(diào)用其中函數(shù)的程序員,只要使用文件包含處理功能,將所需文件包含進(jìn)來(lái)即可,不必再重復(fù)定義它們,從而減少重復(fù)勞動(dòng)。2023/11/2514二、文件包含說(shuō)明:一條包含命令,只能指定一個(gè)被包含文件。如果要包含n個(gè)文件,則要用n條包含命令。編譯預(yù)處理時(shí),預(yù)處理程序?qū)⒉檎抑付ǖ谋话募?,并將其?fù)制到#include命令出現(xiàn)的位置上。文件包含可以嵌套,即被包含文件中又包含另一個(gè)文件。2023/11/2515三、條件編譯條件編譯:程序中一部分內(nèi)容只在滿(mǎn)足一定條件時(shí)才進(jìn)行編譯,即對(duì)這一部分內(nèi)容指定編譯的條件作用:可有效地提高程序的可移植性,并廣泛地應(yīng)用在商業(yè)軟件中,為一個(gè)程序提供各種不同的版本。2023/11/2516三、條件編譯

#ifdef

標(biāo)識(shí)符程序段1;

[#else

程序段2;]

#endif功能:當(dāng)“標(biāo)識(shí)符”已經(jīng)被#define命令定義過(guò),則編譯程序段1,否則編譯程序段2。2023/11/2517三、條件編譯

#ifndef

標(biāo)識(shí)符程序段1;

[#else

程序段2;]

#endif功能:與第一種形式的作用相反,若“標(biāo)識(shí)符”未被#define命令定義過(guò),則編譯程序段1,否則編譯程序段2。2023/11/2518三、條件編譯

#if表達(dá)式程序段1;

[#else

程序段2;]

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論