




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
C語(yǔ)言程序設(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í)符”為所定義的宏名,通常用大寫(xiě)字母表示,以便與變量區(qū)別;“語(yǔ)言符號(hào)字符串”可以是常數(shù)、表達(dá)式、格式串等。與其配對(duì)使用的是#undef,表示結(jié)束標(biāo)志符的定義。9.1.1符號(hào)常量宏定義
用一個(gè)指定的標(biāo)識(shí)符(即名字)來(lái)代表一個(gè)字符串。2.使用宏定義的優(yōu)點(diǎn)(1)可提高源程序的可維護(hù)性。(2)可提高源程序的可移植性。
(3)減少源程序中重復(fù)書(shū)寫(xiě)字符串的工作量。例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)宏名一般用大寫(xiě)字母表示,用來(lái)與變量區(qū)別。(2)宏定義不是C語(yǔ)句,所以不能在行尾加分號(hào)。否則,宏展開(kāi)時(shí),會(huì)將分號(hào)作為字符串的一個(gè)字符,用于替換宏名。(3)在宏展開(kāi)時(shí),預(yù)處理程序僅以按宏定義簡(jiǎn)單替換宏名,而不作任何檢查。如果有錯(cuò)誤,只能由編譯程序在編譯宏展開(kāi)后的源程序時(shí)發(fā)現(xiàn)。(4)宏定義命令#define出現(xiàn)在函數(shù)的外部,宏名的有效范圍是:從定義命令之后,到本文件結(jié)束。通常,宏定義命令放在文件開(kāi)頭處。
(5)在進(jìn)行宏定義時(shí),可以引用已定義的宏名。(6)對(duì)雙引號(hào)括起來(lái)的字符串內(nèi)的字符,即使與宏名同名,也不進(jìn)行宏展開(kāi)。應(yīng)用宏可編寫(xiě)通用性強(qiáng)的程序;可減少書(shū)寫(xiě)錯(cuò)誤。3.說(shuō)明:(7)宏名常用在以下兩方面:用一個(gè)有意義的名字去代替含義不清的一串?dāng)?shù)字,比如用PI代表圓周率,用PAGE_SIZE代表每頁(yè)打印的行數(shù)等,如:#definePI3.14159265358979#definePAGE_SIZE66這樣在程序中使用PI和PAGE_SIZE比用3.14159265358979和66的含義明確多了,既簡(jiǎn)單又清楚,既便于修改又可避免出錯(cuò)。用一個(gè)短的名字去代替較長(zhǎng)的名字如:#defineSTUstructstudentSTUstud1,stud2;即等價(jià)于structstudentstud1,stud2;(8)程序設(shè)計(jì)中常見(jiàn)的錯(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)用和宏展開(kāi)調(diào)用格式:宏名(實(shí)參表);宏展開(kāi):用宏調(diào)用提供的實(shí)參字符串,直接置換宏定義命令行中、相應(yīng)形參字符串,非形參字符保持不變。3.說(shuō)明:(1)定義有參宏時(shí),宏名與左圓括號(hào)之間不能留有空格。否則,C編譯系統(tǒng)將空格以后的所有字符均作為替代字符串,而將該宏視為無(wú)參宏。(2)有參宏的展開(kāi),只是將實(shí)參作為字符串,簡(jiǎn)單地置換形參字符串,而不做任何語(yǔ)法檢查。在定義有參宏時(shí),在所有形參外和整個(gè)字符串外,均加一對(duì)圓括號(hào)。宏值中間的參數(shù)要用圓括號(hào)括起來(lái)。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)來(lái)一般形式:#include“文件名”或#include<文件名>處理過(guò)程:預(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)來(lái)即可,不必再重復(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說(shuō)明即可加以引用。(4)被包含文件的擴(kuò)展名一般用.h,表示是在文件開(kāi)頭加進(jìn)來(lái)的,其內(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)試程序等過(guò)程變得靈活。(3)使用條件編譯可以減少目標(biāo)程序的長(zhǎng)度例
輸入一行字母字符,根據(jù)需要設(shè)置條件編譯,使之能將字母全改為大寫(xiě)字母輸出,或全改為小寫(xiě)字母輸出。#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. 本站所有資源如無(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《財(cái)務(wù)軟件應(yīng)用》課件(共九個(gè)項(xiàng)目)
- 預(yù)防兒童腹瀉培訓(xùn)課件
- 預(yù)防中暑安全課件
- 預(yù)備小學(xué)生課件
- 項(xiàng)目部稅務(wù)籌劃課件
- 項(xiàng)目性學(xué)習(xí)實(shí)驗(yàn)說(shuō)課課件
- 音樂(lè)課件與環(huán)境相關(guān)主題
- 鐵路工程培訓(xùn)課件模板
- 健康飲食產(chǎn)業(yè)園項(xiàng)目人力資源管理方案(模板)
- 相關(guān)專(zhuān)業(yè)知識(shí):健康教育的基本理論三
- 2024年糧食購(gòu)銷(xiāo)合同電子版(2篇)
- 齊魯工業(yè)大學(xué)2025級(jí)上半年期末大學(xué)法理學(xué)題庫(kù)
- 極簡(jiǎn)市場(chǎng)營(yíng)銷(xiāo)
- 潔牙知情同意書(shū)
- 礦山救護(hù)規(guī)程課件
- 橡膠制品在電力電氣行業(yè)中的應(yīng)用研究
- 《動(dòng)態(tài)流量平衡閥》課件
- 跨境電商的法規(guī)和政策解讀與分析
- 電子科技大學(xué)《移動(dòng)通信原理》第七章IS95及其增強(qiáng)移
- 國(guó)家中小學(xué)智慧教育平臺(tái)培訓(xùn)專(zhuān)題講座
- 7個(gè)生活中溝通成功案例 3篇
評(píng)論
0/150
提交評(píng)論