C語言程序設(shè)計(jì)課件:編譯預(yù)處理_第1頁
C語言程序設(shè)計(jì)課件:編譯預(yù)處理_第2頁
C語言程序設(shè)計(jì)課件:編譯預(yù)處理_第3頁
C語言程序設(shè)計(jì)課件:編譯預(yù)處理_第4頁
C語言程序設(shè)計(jì)課件:編譯預(yù)處理_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論