第8章 編譯預(yù)處理_第1頁
第8章 編譯預(yù)處理_第2頁
第8章 編譯預(yù)處理_第3頁
第8章 編譯預(yù)處理_第4頁
第8章 編譯預(yù)處理_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

八、編譯預(yù)處理

宏定義

2文件包含命令3小型案例5

任務(wù)71條件編譯4任務(wù)分析1求解某校園圓形花壇的圓周長及圓面積要解決這類問題,首先為所需使用的常量確定好便于記憶和理解的符號標(biāo)識,以便構(gòu)造程序和整理程序文本,從而也方便程序的修改和移值,接下來按程序功能編碼。程序中運(yùn)用圓周長計算公式及圓面積計算公式進(jìn)行計算,公式書寫符合C語言語句形式即可。返回首頁任務(wù)分析1要解決這類問題,首先為所需使用的常量確定好便于記憶和理解的符號標(biāo)識,以便構(gòu)造程序和整理程序文本,從而也方便程序的修改和移值,接下來按程序功能編碼。程序中運(yùn)用圓周長計算公式及圓面積計算公式進(jìn)行計算,公式書寫符合C語言語句形式即可。數(shù)據(jù)需求問題輸入r/*表示圓的半徑*/問題輸出circ/*存放圓的周長*/area/*存放圓的面積*/返回首頁任務(wù)分析1求解圓周長及面積的程序*/#include<stdio.h>/*預(yù)處理,頭文件對printf,scanf函數(shù)的聲明*/#definePI3.14159/*定義符號常量PI*/doublecirc(r)doubler;{return(2.0*PI*r);}doublearea(r)返回首頁任務(wù)分析1doubler;{return(PI*r*r);}main(){doubler;/*定義雙精度型變量r*/printf(“請輸入待求圓半徑:”);/*輸入圓的半徑*/scanf(“%lf\n”,r);printf(“所求圓的周長%.4f=circ\n”,circ(r));/*所求圓的周長*/printf(“所求圓的面積%.4f=area\n”,area(r));/*所求圓的面積*/}運(yùn)行結(jié)果:請輸入待求圓半徑:1.0所求圓的周長=6.2832所求圓的面積=3.1416返回首頁宏定義1

宏定義是編譯預(yù)處理內(nèi)容之一,C語言的宏定義分為兩種形式,即帶參數(shù)的宏定義和不帶參數(shù)的宏定義兩種形式。返回首頁無參宏定義1無參宏是用一個簡單的名字代替一長的字符串,一般定義格式為:#define符號常量名字符串其中符號常量名稱為宏名,習(xí)慣上用大寫字母表示,常量名與所對應(yīng)的字符串間用空格符隔開,在程序中,凡出現(xiàn)符號常量名的地方,經(jīng)編譯預(yù)處理后就都被替換為它所對應(yīng)的字符串,即所謂的宏展開。

行尾無需符號無參宏定義1例8.1無參宏應(yīng)用舉例#include<stdio.h>#defineR3.0#definePI3.1415926#defineL2*PI*R#defineSPI*R*Rmain(){printf(“L=%f\nS=%f\n”,L,S);}程序運(yùn)行結(jié)果為:L=18.849556S=28.274333帶參宏定義1除簡單的宏定義(即不帶參的宏)外,C語言預(yù)處理還允許帶參數(shù)的宏定義,進(jìn)行預(yù)處理時不僅對定義的宏名進(jìn)行替換,而且還進(jìn)行參數(shù)替換,定義的一般格式為:#define宏名(參數(shù)表)字符串其中,字符串中應(yīng)該包含在參數(shù)表中所指定的參數(shù)注意:使用宏定義所帶的實參可以是常量、已被賦值的變量或表達(dá)式,一個宏定義所帶參數(shù)可以多于一個,使用帶參宏編程時,應(yīng)注意在宏定義中宏名和左括號間沒有空格,另外帶參宏還允許宏定義嵌套。返回首頁返回節(jié)首2

帶參宏定義例8.2帶參宏應(yīng)用舉例#include<stdio.h>#definePI3.1415926#defineCIRCLE(R,V)V=4.0/3.0*PI*R*Rmain(){floatr,v;scanf(“%f”,&r);CIRCLE(r,v);printf(“r=%6.2f,v=%6.2f\n”,r,v);}程序運(yùn)行結(jié)果為:3.5r=3.50,v=179.59返回首頁2

宏命令#undef用于終止宏定義的作用域,一般形式為:#undefine宏名例如:#defineG9.8main(){…../*G的有效范圍是從定義開始到#undefG止*/}#undefGf1(){……}分析:由于在函數(shù)f1()之前終止了宏名G的作用,故G不再在f1()中起作用,#undef也可用于函數(shù)內(nèi)部。終止宏定義2

所謂文件包含預(yù)處理是指在一個文件中將另外一個文件的全部內(nèi)容包含進(jìn)來的處理過程,即將另外的文件包含到本文件中。C語言編譯預(yù)處理命令#include實現(xiàn)包含操作,一般形式為:#include<文件名>或#include“文件名”其中,文件名是指要包含進(jìn)來的文本文件的名稱,也稱為頭文件或編譯預(yù)處理文件。

文件包含命令2

例如,在file1.c文件中有如下內(nèi)容:inta,b,c;floatx,y,z;charm,n,p;file2.c文件內(nèi)容如下:#include“file1.c”main(){……}則對file2.c文件進(jìn)行編譯處理時,在編譯處理階段將對其中的#include命令進(jìn)行”文件包含”處理,將file1.c文件中的全部內(nèi)容插入到file2.c文件中的#include“file1.c”預(yù)處理語句處,也即是將file1.c文件中的內(nèi)容包含到file2.c文件中,經(jīng)編譯預(yù)處理后,file2.c文件的內(nèi)容為:inta,b,c;floatx,y,z;charm,n,p;main(){……}文件包含命令2

不同的庫函數(shù)其功能是不一樣的,以下是C語言中常用的標(biāo)準(zhǔn)頭文件

文件包含命令表8.1C語言中的常用標(biāo)準(zhǔn)頭文件2

一般情況源程序中所有的行都參加編譯,但有時希望對其中一部分內(nèi)容只有在滿足一定條件下才進(jìn)行編譯,也即是對一部分內(nèi)容指定編譯條件,這就是“條件編譯”。適當(dāng)使用條件編譯將有助于程序的調(diào)試和移值。條件編譯分如下幾種形式:條件編譯2

1.帶#if、#else和#endif標(biāo)識的定義的一般形式為:#ifdef表達(dá)式程序段1#else表達(dá)式程序段2#endif其功能是當(dāng)表達(dá)式值為真時,則執(zhí)行程序段1;否則執(zhí)行程序段2,其表達(dá)式必須是不整型常量表達(dá)式。2.帶#ifdef標(biāo)識的定義的一般形式為:#ifdef宏名程序段1#else條件編譯2

程序段2#endif其功能是用來測試一個宏名是否被定義,若宏名被定義則編譯程序段1;否則編譯程序段2。3.帶#ifndef標(biāo)識的定義的一般形式為:#ifndef宏名程序段1#else程序段2#endif其功能是用來測試一個宏名是否曾被定義,若宏名未被定義則編譯程序段1;否則編譯程序段2。條件編譯2

例8.3從鍵盤輸入10個整數(shù),并依所設(shè)置的編譯條件將其中的最大值或最小值顯示出來。#include<stdio.h>#defineMFLAG1mai(){inti,M;intarray[10];for(i=0;i<10;i++)scanf(“%d”,&array[i]);/*鍵盤輸入整數(shù)到數(shù)組array中*/M=array[0];/*將數(shù)組中第一個元素賦給M*/for(i=1;i<10;i++) {#ifMFLAG/*根據(jù)條件編譯完成不同條件下的編譯操作*/條件編譯2

/*當(dāng)M為1時,/求10個數(shù)中的最大者,否則求最小者*/if(M<array[i])M=array[i];#elseif(M>array[i])M=array[i];#endif}printf(“M=%d”,M);}條件編譯2

提出問題:對字符的操作,有時需要將字符的大小寫進(jìn)行切換,比如輸入一組字符將它轉(zhuǎn)換為大寫形式輸出或是以小寫形式輸出等,本例程中就是要求任意輸入一行字母字符,根據(jù)需要設(shè)條件編譯,使之能將字母全改為大寫輸出或小寫輸出。小型案例2

分析問題:可先設(shè)定一個常量,作為后續(xù)進(jìn)行預(yù)處理的條件編譯命令的條件選項,依不同的條件作相應(yīng)的條件編譯。數(shù)據(jù)需求問題輸入LETTER/*作為存放字母字符的常量標(biāo)識*/str[]/*一個字符串?dāng)?shù)組*/問題輸出轉(zhuǎn)換后的字母符號相關(guān)計算公式小寫字母-32==大寫字母小型案例2

求解問題:算法如下1.讀取字符串?dāng)?shù)組的各個字符2.依LETTER標(biāo)識條件,作相應(yīng)的轉(zhuǎn)換3.用小寫字母與大寫字母間的差值為32進(jìn)行計算轉(zhuǎn)換小型案例2

程序?qū)崿F(xiàn):字符的大小寫轉(zhuǎn)換程序*/#defineLETTER1main(){charstr[20]=“Clanguage”,c;inti;

溫馨提示

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

評論

0/150

提交評論