C++高級(jí)程序設(shè)計(jì):第06章 編譯預(yù)處理_第1頁(yè)
C++高級(jí)程序設(shè)計(jì):第06章 編譯預(yù)處理_第2頁(yè)
C++高級(jí)程序設(shè)計(jì):第06章 編譯預(yù)處理_第3頁(yè)
C++高級(jí)程序設(shè)計(jì):第06章 編譯預(yù)處理_第4頁(yè)
C++高級(jí)程序設(shè)計(jì):第06章 編譯預(yù)處理_第5頁(yè)
已閱讀5頁(yè),還剩16頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第6章編譯預(yù)處理本章要點(diǎn)了解帶參的宏定義和不帶參的宏定義了解文件包含及使用方法自學(xué)條件編譯在程序設(shè)計(jì)中的使用主要內(nèi)容概述宏定義文件包含條件編譯(自學(xué))編譯預(yù)處理編譯預(yù)處理:編譯器在對(duì)源程序正式編譯之前,對(duì)源程序進(jìn)行的文字上的處理工作。預(yù)處理1預(yù)處理2編譯

f.cpp

f'.cpp

f''.cpp內(nèi)容變化內(nèi)容變化連接

f.obj

f.exe“預(yù)處理”命令行以“#”開頭末尾不加“;”可以放在程序的任何位置編譯預(yù)處理三種預(yù)處理宏定義文件包含條件編譯(自學(xué))不帶參數(shù)的宏定義#definePI3.1415926標(biāo)識(shí)符字符串不帶參數(shù)的宏定義例#include<iostream.h>//li0601.cpp不帶參數(shù)的宏定義#definePI3.1415926voidmain(){ doublel,s,r,v;

cout<<"inputradius:";

cin>>r; l=2.0*PI*r; s=PI*r*r; v=4.0/3*PI*r*r*r;

cout<<"周長(zhǎng)為:"<<l<<"\n面積為:"<<s<<"\n體積為:"<<v<<'\n';}l=2.0*3.1415926*r;s=3.1415926*r*r;v=4.0/3*3.1415926*r*r*r;宏代換后說明一般用大寫字母表示宏名減少程序中的重復(fù)書寫,提高通用性

如:#definearray_size100

int

array[array_size];便于修改只作簡(jiǎn)單置換,不作任何計(jì)算,不作語(yǔ)法檢查不是C++語(yǔ)句,不在行末加“;”有效范圍:定義命令之后到本源文件結(jié)束#undef終止宏定義的作用域例:#definePI3.1415926main(){…}#undefPIf1()...PI的有效范圍雙引號(hào)中的字符,與宏名相同也不置換說明宏定義時(shí),可引用已定義的宏名#include<iostream.h>//li0602.cpp#defineR5.0#definePI3.1415926#defineL2*PI*R#defineSPI*R*Rvoidmain(){ cout<<"L="<<L<<"\nS="<<S<<endl;}不置換帶參數(shù)的宏定義格式:#define宏名(參數(shù)表)字符串例

#defines(a,b)a*b … area=s(2,3);帶參數(shù)的宏定義例#include<iostream.h>//bc0601.cpp#definePI3.1415926#defineS(r)PI*r*rvoidmain(){ floata,area; a=3.6; area=S(a);

cout<<"r="<<a<<'\n'<<"area="<<area<<endl;}如:area=s(a+b);

則area=PI*a+b*a+b顯然與原意不符如何改?#defines(r)PI*(r)*(r)注意:宏定義時(shí),宏名與帶參數(shù)的括號(hào)間不應(yīng)加空格#defines(r)PI*r*r此例將s定義為(r)PI*r*r注意①可以嵌套定義宏例:#defineMAX2(a,b)((a)>(b)?(a):(b))#defineMAX4(a,b,c,d)MAX2(MAX2(a,b),MAX2(c,d))√②不允許遞歸定義例:

#definefac(n)n<=1?1:n*fac(n-1)×文件包含作用:讓編譯預(yù)處理器把另一個(gè)源文件嵌入(包含)到當(dāng)前源文件中的該指令處。

#include"file2.h"A

B

file1.cppfile2.h

A

B

file1'.cpp包含處理一般形式文件包含命令格式如下:

①#include"文件名"或

②#include<文件名>區(qū)別:設(shè)用戶源程序在文件夾D:\VC中,系統(tǒng)規(guī)定的標(biāo)準(zhǔn)頭文件在下述文件夾中(標(biāo)準(zhǔn)包含路徑)

C:\ProgramFiles\MicrosoftVisualStudio\VC98\Include則:對(duì)①編譯器先在D:\VC

文件夾中查找要包含的頭文件,

若找不到,再到標(biāo)準(zhǔn)包含路徑下查找該文件,找到后,將該頭文件插入到用戶源文件頭部。對(duì)②編譯器直接到標(biāo)準(zhǔn)包含路徑下查找該文件。C:\ProgramFiles\MicrosoftVisualStudio\VC98\IncludeC:\ProgramFiles\MicrosoftVisualStudio\VC98\Lib若包含系統(tǒng)提供的頭文件,則用②較好若包含自己寫的文件,則用①較好包含處理的例子intx=200,y=100;floatx1=25.6,x2=28.9;file1.h#include"file1.h"#include<iostream.h>voidmain(void){cout<<x<<'\t'<<y<<'\n';

cout<<x1<<'\t'<<x2<<'\n';}file2.cppintx=200,y=100;floatx1=25.6,x2=28.9;#include<iostream.h>voidmain(void){cout<<x<<'\t'<<y<<'\n';

cout<<x1<<'\t'<<x2<<'\n';}file2'.cpp包含處理后編譯器對(duì)該文件,進(jìn)行編譯連接。一條文件包含命令只能包含一個(gè)文件條件編譯的幾種形式形式1 #ifdef

標(biāo)識(shí)符程序段1 [#else

程序段2]#endif可以沒有當(dāng)標(biāo)識(shí)符已被定義過(一般是用#define定義),則編譯程序段1條件編譯的幾種形式形式2 #ifndef

標(biāo)識(shí)符程序段1[#else

程序段2]#endif可以沒有意義與形式1相反未定義幾種形式形式3#if表達(dá)式/*或#if(表達(dá)式)*/程序段1[#else程序段2]#endif例#include<iostream.h>#defineLETTER0voidmain(){charc; do {cin.get(c); #ifLETTER if(c>='a'&&c<='z') c=c-32; #else

溫馨提示

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

評(píng)論

0/150

提交評(píng)論