




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
C語言程序設(shè)計(jì)
編譯預(yù)處理9.1宏定義
9.1.1符號(hào)常量宏定義
9.1.2帶參數(shù)宏定義
9.2文件包含命令
9.3條件編譯
9.3.1條件編譯概念
9.3.2條件編譯優(yōu)點(diǎn)
9.1宏定義
1.不帶參數(shù)宏定義一般格式: #define標(biāo)識(shí)符字符串
其中:“define”為宏定義命令;“標(biāo)識(shí)符”為所定義的宏名,通常用大寫字母表示,以便與變量區(qū)別;“語言符號(hào)字符串”可以是常數(shù)、表達(dá)式、格式串等。與其配對(duì)使用的是#undef,表示結(jié)束標(biāo)志符的定義。9.1.1符號(hào)常量宏定義
用一個(gè)指定的標(biāo)識(shí)符(即名字)來代表一個(gè)字符串。2.使用宏定義的優(yōu)點(diǎn)(1)可提高源程序的可維護(hù)性。(2)可提高源程序的可移植性。
(3)減少源程序中重復(fù)書寫字符串的工作量。例9-1宏定義應(yīng)用。#include<stdio.h>
#definePR10voidmain(){inti=6;printf(“i+PR=%d\n”,i+PR);
#undefPR
#definePR50
printf(“i+PR=%d\n”,i+PR);}運(yùn)行結(jié)果:i+PR=16i+PR=56(1)宏名一般用大寫字母表示,用來與變量區(qū)別。(2)宏定義不是C語句,所以不能在行尾加分號(hào)。否則,宏展開時(shí),會(huì)將分號(hào)作為字符串的一個(gè)字符,用于替換宏名。(3)在宏展開時(shí),預(yù)處理程序僅以按宏定義簡單替換宏名,而不作任何檢查。如果有錯(cuò)誤,只能由編譯程序在編譯宏展開后的源程序時(shí)發(fā)現(xiàn)。(4)宏定義命令#define出現(xiàn)在函數(shù)的外部,宏名的有效范圍是:從定義命令之后,到本文件結(jié)束。通常,宏定義命令放在文件開頭處。
(5)在進(jìn)行宏定義時(shí),可以引用已定義的宏名。(6)對(duì)雙引號(hào)括起來的字符串內(nèi)的字符,即使與宏名同名,也不進(jìn)行宏展開。應(yīng)用宏可編寫通用性強(qiáng)的程序;可減少書寫錯(cuò)誤。3.說明:(7)宏名常用在以下兩方面:用一個(gè)有意義的名字去代替含義不清的一串?dāng)?shù)字,比如用PI代表圓周率,用PAGE_SIZE代表每頁打印的行數(shù)等,如:#definePI3.14159265358979#definePAGE_SIZE66這樣在程序中使用PI和PAGE_SIZE比用3.14159265358979和66的含義明確多了,既簡單又清楚,既便于修改又可避免出錯(cuò)。用一個(gè)短的名字去代替較長的名字如:#defineSTUstructstudentSTUstud1,stud2;即等價(jià)于structstudentstud1,stud2;(8)程序設(shè)計(jì)中常見的錯(cuò)誤是宏定義時(shí)在宏值的后面加分號(hào)如:#definePI3.14159;則對(duì)s=2*PI*r;會(huì)替換成s=2*3.14159;*r;這會(huì)產(chǎn)生編譯錯(cuò)誤。1.帶參數(shù)宏的一般格式:#define宏名(參數(shù)表)替換串2.帶參數(shù)宏的調(diào)用和宏展開調(diào)用格式:宏名(實(shí)參表);宏展開:用宏調(diào)用提供的實(shí)參字符串,直接置換宏定義命令行中、相應(yīng)形參字符串,非形參字符保持不變。3.說明:(1)定義有參宏時(shí),宏名與左圓括號(hào)之間不能留有空格。否則,C編譯系統(tǒng)將空格以后的所有字符均作為替代字符串,而將該宏視為無參宏。(2)有參宏的展開,只是將實(shí)參作為字符串,簡單地置換形參字符串,而不做任何語法檢查。在定義有參宏時(shí),在所有形參外和整個(gè)字符串外,均加一對(duì)圓括號(hào)。宏值中間的參數(shù)要用圓括號(hào)括起來。9.1.2帶參數(shù)宏定義
例9-3帶參數(shù)宏的應(yīng)用。#include<stdio.h>#definePI3.141592/*宏定義
定義符號(hào)常量圓周率PI*/#defineS(r)(PI)*(r)*(r)/*宏定義
定義計(jì)算圓面積*/voidmain(){doubleR,area1,area2;printf("輸入圓半徑:");scanf("%lf",&R);area1=S(R);area2=S(R+5);printf("圓面積(r=%0.1f):%0.4f\n",R,area1);printf("圓面積(r=%0.1f+5):%0.4f\n",R,area2);}9.2文件包含命令功能:一個(gè)源文件可將另一個(gè)源文件的內(nèi)容全部包含進(jìn)來一般形式:#include“文件名”或#include<文件名>處理過程:預(yù)編譯時(shí),用被包含文件的內(nèi)容取代該預(yù)處理命令,再對(duì)“包含”后的文件作一個(gè)源文件編譯<>直接按標(biāo)準(zhǔn)目錄搜索“”先在當(dāng)前目錄搜索,再搜索標(biāo)準(zhǔn)目錄可指定路徑#include“file2.c”file1.cfile2.cfile1.cfile2.cABA9.2文件包含命令文件包含的優(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)來即可,不必再重復(fù)定義它們,從而減少重復(fù)勞動(dòng)。即file1.c把file2.c的拷貝包含到自己的內(nèi)部,成為一個(gè)大文件,然后再一塊編譯,所以被包含文件file2.c應(yīng)當(dāng)是源文件,不應(yīng)當(dāng)是目標(biāo)(.obj)文件。頭文件不能單獨(dú)編譯,它只能和C源程序文件一起進(jìn)行編譯。9.2文件包含命令注意:(1)一個(gè)#include指令只能包含一個(gè)文件,要包含多個(gè)文件就要用多個(gè)#include指令。(2)文件包含可以嵌套#include“file2.c”file1.cAfile3.cC#include“file3.c”file2.c
Bfile1.cAfile3.cfile2.c9.2文件包含命令注意:(3)被包含文件中的全局變量也是包含文件中的全局變量,因此在包含文件中對(duì)這些量不必再加extern說明即可加以引用。(4)被包含文件的擴(kuò)展名一般用.h,表示是在文件開頭加進(jìn)來的,其內(nèi)容可以是程序文件或數(shù)據(jù)文件,也可以是宏定義、全局變量聲明等。這些數(shù)據(jù)有相對(duì)的獨(dú)立性,可被多個(gè)文件使用,不必在多個(gè)文件中都去定義,而只在一個(gè)文件中定義,其他文件中包含這個(gè)定義文件即可。9.3條件編譯條件編譯可有效地提高程序的可移植性,并廣泛地應(yīng)用在商業(yè)軟件中,為一個(gè)程序提供各種不同的版本。利用條件編譯,還可使同一源程序即適合于調(diào)試(進(jìn)行程序跟蹤、打印較多的狀態(tài)或錯(cuò)誤信息),又適合高效執(zhí)行要求。條件編譯主要有以下用途:(1)忽略程序的某一部分。(2)幫助程序調(diào)試9.3.1條件編譯概念
9.3條件編譯條件編譯格式條件編譯命令常常應(yīng)用在頭文件中,防止標(biāo)識(shí)符重定義。條件編譯命令有以下形式:格式1:
#ifdef標(biāo)識(shí)符程序段1#else
程序段2#endif
或
#ifdef標(biāo)識(shí)符 程序段1#endif標(biāo)識(shí)符已經(jīng)#define定義,執(zhí)行程序段1;否則,執(zhí)行程序段2。格式2:
#ifndef標(biāo)識(shí)符程序段1#else
程序段2#endif
或
#ifndef標(biāo)識(shí)符 程序段1#endif標(biāo)識(shí)符未經(jīng)#define定義,執(zhí)行程序段1;否則,執(zhí)行程序段2。9.3條件編譯條件編譯格式(1)提高了C源程序的通用性。(2)使調(diào)試程序等過程變得靈活。(3)使用條件編譯可以減少目標(biāo)程序的長度例
輸入一行字母字符,根據(jù)需要設(shè)置條件編譯,使之能將字母全改為大寫字母輸出,或全改為小寫字母輸出。#defineLETTER1main(){charstr[20]=“CLanguage”,c;inti=0;while((c=str[i])!=’\0’){i++;#ifLETTERif(c>=’a’&&c<=’z’)c=c-32;#elseif(c>=’A’&&c<=’Z’)c=c+32;#endifprintf(“%c”,c);}}9
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國單雙臂路燈數(shù)據(jù)監(jiān)測研究報(bào)告
- 2025至2030年中國化學(xué)制品數(shù)據(jù)監(jiān)測研究報(bào)告
- 2025至2030年中國分離輪總成數(shù)據(jù)監(jiān)測研究報(bào)告
- 2025至2030年中國光控感應(yīng)電筒數(shù)據(jù)監(jiān)測研究報(bào)告
- 2025至2030年中國便攜式剪擴(kuò)器數(shù)據(jù)監(jiān)測研究報(bào)告
- 2025至2030年中國JEEP汽車半軸數(shù)據(jù)監(jiān)測研究報(bào)告
- 2025至2030年中國DVD碟機(jī)數(shù)據(jù)監(jiān)測研究報(bào)告
- T恤成衣企業(yè)ESG實(shí)踐與創(chuàng)新戰(zhàn)略研究報(bào)告
- 棕、藤、草企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級(jí)戰(zhàn)略研究報(bào)告
- 2025年中國黃花梨梳面交摺凳市場調(diào)查研究報(bào)告
- 小兒高熱驚厥精品課件
- 優(yōu)秀員工榮譽(yù)證書模板
- 仁愛版八年級(jí)英語上復(fù)習(xí)課Unit 2 Keep Healthy Topic1 2教學(xué)課件
- 三維電生理導(dǎo)航系統(tǒng)技術(shù)參數(shù)
- 三年級(jí)下冊科學(xué)活動(dòng)手冊
- 《交通工程CAD》課程教學(xué)大綱(本科)
- 人教版數(shù)學(xué)五年級(jí)下冊 全冊各單元教材解析
- 換班申請表(標(biāo)準(zhǔn)模版)
- 者陰村戰(zhàn)友紀(jì)念者陰山對(duì)越自衛(wèi)還擊作戰(zhàn)30周年聯(lián)誼會(huì)計(jì)劃2
- 基于單片機(jī)的電子廣告牌設(shè)計(jì)畢業(yè)設(shè)計(jì)論文
- 承插型盤扣式支模架專項(xiàng)施工方案
評(píng)論
0/150
提交評(píng)論