版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第5章函數(shù)與程序結(jié)構(gòu)(B)主要內(nèi)容局部變量,全局變量靜態(tài)變量變量的存儲(chǔ)類(lèi)型變量的作用域變量的生命期變量的可見(jiàn)性編譯預(yù)處理頭文件與多文件結(jié)構(gòu)小結(jié)與作業(yè)變量在內(nèi)存中的存放程序員對(duì)變量的使用2課件制作5.11局部變量和全局變量程序的運(yùn)行和數(shù)據(jù)的訪(fǎng)問(wèn)程序開(kāi)始運(yùn)行和運(yùn)行結(jié)束時(shí)占用的內(nèi)存程序運(yùn)行時(shí)占用的內(nèi)存BootLoader3課件制作5.11局部變量和全局變量程序的內(nèi)存區(qū)域代碼區(qū)(codearea)全局?jǐn)?shù)據(jù)區(qū)(dataarea)堆區(qū)(heaparea)棧區(qū)(stackarea)程序中各個(gè)函數(shù)代碼塊存放程序的全局?jǐn)?shù)據(jù)和靜態(tài)數(shù)據(jù)存放程序的動(dòng)態(tài)數(shù)據(jù)存放程序的局部數(shù)據(jù)即各個(gè)函數(shù)中的數(shù)據(jù)4課件制作5.11局部變量和全局變量局部變量(localvariable)函數(shù)內(nèi)部定義的變量,只在本函數(shù)范圍內(nèi)有效復(fù)合語(yǔ)句({}括起的語(yǔ)句
)中定義的變量,只在本復(fù)合語(yǔ)句范圍內(nèi)有效floatf1(inta)//函數(shù)f1{
inti1,i2;┆floatb,c; ┆returnb;}b、c有效a有效intmain()//主函數(shù){
intm,n;┆
{
int
p,q; ┆
}returnn;}p、q有效域m、n有效5課件制作5.11局部變量和全局變量局部變量(localvariable)局部變量如果沒(méi)有顯式初始化其內(nèi)容是不可預(yù)料的,即變量必須在使用之前聲明一個(gè)局部變量的作用域從它的聲明開(kāi)始,直至包含它的程序塊結(jié)束可以在一個(gè)函數(shù)內(nèi)的復(fù)合語(yǔ)句中定義變量,這些變量只在本復(fù)合語(yǔ)句中有效,這種復(fù)合語(yǔ)句也稱(chēng)為分程序或程序塊形式參數(shù)也是局部變量,參數(shù)的作用域覆蓋整個(gè)函數(shù)不同函數(shù)中可以使用同名的變量,它們代表不同的對(duì)象,互不干擾函數(shù)中的局部變量存放在棧區(qū)6課件制作5.11局部變量和全局變量#include<iostream>usingnamespacestd;inlineint
square(inti){returni*i;}intmain(){
inti=0;i=square(i);
for(;i<3;i++){
intj=1;j+=square(j);
cout<<j<<",";}
cout<<endl;
cout<<"j的值為"<<j<<endl;
cout<<"i的值為"<<i<<endl;return0;}main函數(shù)中定義了變量i,在square函數(shù)中也定義變量i,它們?cè)趦?nèi)存中占不同的單元,不會(huì)混淆square函數(shù)中的形參i也只在square函數(shù)中有效,其他函數(shù)不能調(diào)用復(fù)合語(yǔ)句中的變量只在復(fù)合語(yǔ)句內(nèi)有效7課件制作5.11局部變量和全局變量voidfnFunction(){intx=1;inty=1;for(inti=1;i<10;i++){
intj=i+1;x+=i;}for(i=1;i<10;i++){
intj=i+1;y+=j;}cout<<i<<endl;cout<<j<<endl;return;}i作用域
j作用域
j作用域教材P123圖5_7有誤8課件制作5.11局部變量和全局變量全局變量,也稱(chēng)全程變量(globalvariable)在函數(shù)之外定義的變量全局變量的有效范圍為從定義變量的位置開(kāi)始到本源文件結(jié)束全局變量的默認(rèn)值:數(shù)值變量是0,字符變量為空格9課件制作5.11局部變量和全局變量intp=1,q=5;//全局變量
floatf1(floata)//定義函數(shù)f1{
intb,c;┆}charc1,c2;//全局變量
charf2(intx,inty)//定義函數(shù)f2{
inti,j;┆}intmain()//主函數(shù){
intm,n;┆}全局變量c1、c2的作用范圍全局變量p、q的作用范圍10課件制作5.11局部變量和全局變量全局變量如果在同一個(gè)源文件中,全局變量與局部變量同名,則在局部變量的作用范圍內(nèi),全局變量被屏蔽,即它不起作用;此時(shí)若要使用全局變量,可通過(guò)一元作用域解析運(yùn)算符::
訪(fǎng)問(wèn)全局變量,參見(jiàn)P122示例設(shè)全局變量的作用是增加函數(shù)間數(shù)據(jù)聯(lián)系的渠道建議不在必要時(shí)不要使用全局變量全局變量在程序的全部執(zhí)行過(guò)程中都占用存儲(chǔ)單元,而不是僅在需要時(shí)才開(kāi)辟單元在執(zhí)行函數(shù)時(shí)要受到外部變量的影響,使函數(shù)的通用性降低,難于移植使用全局變量過(guò)多,會(huì)降低程序的清晰性。在各個(gè)函數(shù)執(zhí)行時(shí)都可能改變?nèi)肿兞康闹?,程序容易出錯(cuò)11課件制作5.12靜態(tài)局部變量在局部變量前使用關(guān)鍵字static修飾,該變量即成為靜態(tài)局部變量,如staticinta;靜態(tài)局部變量存放在內(nèi)存的全局?jǐn)?shù)據(jù)區(qū),在程序整個(gè)運(yùn)行期間都不釋放靜態(tài)局部變量賦初值是在編譯時(shí)分配值的,即只賦初值一次,在程序運(yùn)行時(shí)它已有初值。以后每次調(diào)用函數(shù)時(shí)不再重新賦初值而只是保留上次函數(shù)調(diào)用結(jié)束時(shí)的值若在定義靜態(tài)局部變量時(shí)不賦初值,編譯時(shí)自動(dòng)賦初值0(對(duì)數(shù)值型變量)或空字符(對(duì)字符型變量)靜態(tài)局部變量在其他函數(shù)是不能引用它的,即在其他函數(shù)中它是“不可見(jiàn)”的12課件制作5.12靜態(tài)局部變量#include<iostream>usingnamespacestd;int
f(inta)//定義f函數(shù),a為形參{
intb=0;//定義b為自動(dòng)變量
staticintc=3;//定義c為靜態(tài)局部變量
b=b+1;c=c+1;returna+b+c;}intmain(){
int
i,a=2;
for(i=0;i<3;i++)
cout<<f(a)<<",";
cout<<endl;return0;}13課件制作5.12靜態(tài)局部變量實(shí)例:輸出1~5的階乘值(即1!,2!,3!,4!,5!)。#include<iostream>usingnamespacestd;int
fac(int);//函數(shù)聲明intmain(){
inti;
for(i=1;i<=5;i++)
cout<<i<<"!="<<fac(i)<<endl;return0;}int
fac(intn){
staticintf=1;//f為靜態(tài)局部變量,函數(shù)結(jié)束時(shí)f的值不釋放
f=f*n;//在f原值基礎(chǔ)上乘以nreturnf;}運(yùn)行結(jié)果為1!=12!=23!=64!=245!=120每次調(diào)用fac(i),就輸入一個(gè)i,同時(shí)保留這個(gè)i!的值,以便下次再乘(i+1)14課件制作5.12靜態(tài)局部變量如果初始化后,變量只被引用而不改變其值,則這時(shí)用靜態(tài)局部變量比較方便,以免每次調(diào)用時(shí)重新賦值用靜態(tài)存儲(chǔ)要多占內(nèi)存,而且降低了程序的可讀性,當(dāng)調(diào)用次數(shù)多時(shí)往往弄不清靜態(tài)局部變量的當(dāng)前值是什么盡可能少用靜態(tài)局部變量intmain(){
inti=0;i=square(i);
for(;i<3;i++){
staticinti=1;i+=square(i);
cout<<i+a<<",";}
cout<<i<<endl;return0;}#include<iostream>usingnamespacestd;inta=8;//inlineint
square(inti){returni*i;}思考題:該題運(yùn)行結(jié)果?staticintk=1;k+=squre(k);cout<<k+a<<",";15課件制作5.13存儲(chǔ)類(lèi)型存儲(chǔ)類(lèi)型指的是數(shù)據(jù)在內(nèi)存中存儲(chǔ)的方法存儲(chǔ)方法分為動(dòng)態(tài)存儲(chǔ)和靜態(tài)存儲(chǔ)兩大類(lèi)動(dòng)態(tài)存儲(chǔ)自動(dòng)的(auto)、寄存器的(register)外部的(extern)靜態(tài)存儲(chǔ)靜態(tài)的(static)16課件制作5.13存儲(chǔ)類(lèi)型自動(dòng)存儲(chǔ)自動(dòng)變量用關(guān)鍵字auto作存儲(chǔ)類(lèi)別的聲明存儲(chǔ)類(lèi)別auto和數(shù)據(jù)類(lèi)型int
的順序一般auto在前關(guān)鍵字auto可以省略,系統(tǒng)把它默認(rèn)為自動(dòng)存儲(chǔ)類(lèi)別程序中大多數(shù)變量屬于自動(dòng)變量int
f(inta)//定義f函數(shù),a為形參{autoint
b,c=3;//定義b和c為整型的自動(dòng)變量┆}17課件制作5.13存儲(chǔ)類(lèi)型寄存器存儲(chǔ)只適用于變量變量前加register修飾,如registerinta;當(dāng)今的優(yōu)化編譯系統(tǒng)能夠識(shí)別使用頻繁的變量,自動(dòng)地將這些變量放在寄存器中外部存儲(chǔ):由多個(gè)文件構(gòu)成的一個(gè)程序,在一個(gè)文件中需要使用另一文件定義的函數(shù)或全局變量,需要在使用前用關(guān)鍵字extern
進(jìn)行聲明18課件制作5.13存儲(chǔ)類(lèi)型//文件CH5_41.cpp#include<iostream>usingnamespacestd;voidfn1();//函數(shù)原型聲明externvoidfn2();//外部函數(shù)原型聲明intn;//全局變量聲明intmain(){n=3;fn1();
cout<<n<<endl;return0;}voidfn1(){fn2();}//文件CH5_42.cpp//外部變量聲明extern
intn;externvoidfn1();//函數(shù)fn2定義voidfn2(){n=8;}19課件制作5.13存儲(chǔ)類(lèi)型外部存儲(chǔ)帶extern的變量說(shuō)明是變量聲明,不是變量定義默認(rèn)的函數(shù)聲明或定義總是extern存儲(chǔ)所有函數(shù)的聲明一般都放在源文件的開(kāi)始位置若共同的變量在各個(gè)文件中分別定義,或者聲明的類(lèi)型不一致,都會(huì)造成直接或間接錯(cuò)誤20課件制作5.13存儲(chǔ)類(lèi)型靜態(tài)存儲(chǔ)靜態(tài)局部變量靜態(tài)全局變量在全局變量前用static修飾,使變量只在該源文件中可用,稱(chēng)之為全局靜態(tài)變量,又稱(chēng)靜態(tài)全局變量在多文件組成的程序中,靜態(tài)全局變量使得該變量成為定義該變量的源文件所獨(dú)享靜態(tài)全局變量對(duì)組成該程序的其他源文件是無(wú)效的靜態(tài)函數(shù)在函數(shù)定義返回值類(lèi)型前加static形成靜態(tài)函數(shù),如staticintfn(){……};靜態(tài)函數(shù)使得該函數(shù)只在一個(gè)源文件中有效,不能被其他源文件所使用解決不同源文件中使用同名函數(shù)發(fā)生沖突21課件制作5.14作用域含義:變量的有效范圍C++的作用域范圍分為:局部作用域(塊作用域)、函數(shù)作用域、函數(shù)原型作用域和類(lèi)作用域作用域開(kāi)始于標(biāo)識(shí)符的聲明處局部作用域當(dāng)標(biāo)識(shí)符的聲明出現(xiàn)在由一對(duì)花括號(hào)括起來(lái)的一段程序(塊)內(nèi)時(shí),該標(biāo)識(shí)符的作用域從聲明點(diǎn)開(kāi)始,到塊結(jié)束處為止,該作用域的范圍具有局部性語(yǔ)句是一個(gè)程序單位,如在if語(yǔ)句和switch語(yǔ)句中進(jìn)行條件測(cè)試的表達(dá)式中聲明標(biāo)識(shí)符,則該標(biāo)識(shí)符的作用域在該語(yǔ)句內(nèi)22課件制作5.14作用域//CH5_5#include<iostream>usingnamespacestd;intmain(){
intn;
cout<<"Plsinputn:";
cin>>n;if(n>5)
inti=2*n;
//i作用域{inti=2*n;}else
doublef=n/2.0;//f作用域{doublef=n/2.0;}
cout<<n<<endl;
cout<<i<<endl;//?
cout<<f<<endl;//?return0;}//CH5_5#include<iostream.h>intmain(){
int
i,n=0;
for(i=0;i<10;i++){
floatn2;if(i%2==1)n++;}n2=n/2;//?n=i;return0;}23課件制作5.14作用域函數(shù)作用域:goto語(yǔ)句函數(shù)原型作用域:參數(shù)聲明僅限于原型聲明的括號(hào)內(nèi)文件作用域:在所有函數(shù)定義之外進(jìn)行說(shuō)明,其作用域從說(shuō)明點(diǎn)開(kāi)始一直到源文件結(jié)束全局變量是文件作用域的,靜態(tài)函數(shù)也是文件作用域,文件作用域是全局的在頭文件的文件作用域所進(jìn)行的聲明,若該文件被另一源文件所包含,則聲明的作用域也擴(kuò)展到該源文件中直到源文件結(jié)束24課件制作5.14作用域//文件CH5_41.cpp#include<iostream>usingnamespacestd;voidfn1();//函數(shù)原型聲明externvoidfn2();//外部函數(shù)原型聲明intn;//全局變量聲明intmain(){n=3;fn1();
cout<<n<<endl;return0;}voidfn1(){fn2();}//文件CH5_42.cpp#include"MyLib.h"http://外部變量聲明extern
intn;externvoidfn1();//函數(shù)fn2定義voidfn2(){n=8;}//文件MyLib.hbool
bIsLeapYear(intyear);bool
bIsOdd(intnum);int
fnGetMax(intx,inty,intz);25課件制作5.15生命期與可見(jiàn)性生命期定義:又稱(chēng)生存期,與存儲(chǔ)區(qū)域密切相關(guān),分為靜態(tài)生命期、局部生命期和動(dòng)態(tài)生命期靜態(tài)生命期與程序的運(yùn)行期相同在固定的數(shù)據(jù)區(qū)(代碼區(qū)、數(shù)據(jù)區(qū))中分配空間全局變量、靜態(tài)變量、具有文件作用域的變量、函數(shù)靜態(tài)生命期的變量,若無(wú)顯式初始化則自動(dòng)初始化為0(數(shù)字)或空格(字符)局部生命期函數(shù)內(nèi)部聲明的變量、塊中聲明的變量具有局部生命期的變量住在內(nèi)存棧區(qū)具有局部生命期的變量若未被初始化則內(nèi)容不可知26課件制作5.15生命期與可見(jiàn)性生命期動(dòng)態(tài)生命期由程序中特定的函數(shù)(malloc()和free())或特定操作符(new和delete)來(lái)創(chuàng)建和釋放具有動(dòng)態(tài)生命期的變量住在內(nèi)存的堆中可見(jiàn)性分析在某一位置標(biāo)識(shí)符的有效性可見(jiàn)性與作用域是一致的標(biāo)識(shí)符在某個(gè)位置可見(jiàn),表示該標(biāo)識(shí)符可以被引用常用于分析兩個(gè)同名標(biāo)識(shí)符作用域嵌套的特殊情況標(biāo)識(shí)符的可見(jiàn)范圍不超過(guò)作用域,作用域則包含可見(jiàn)范圍若被隱藏的是全局變量,則可用一元作用域解析運(yùn)算符::
來(lái)引用該全局變量27課件制作5.15生命期與可見(jiàn)性CH5-6:#include<iostream>usingnamespacestd;intg=1;//g為全局變量,具有靜態(tài)生存期。intmain(){
staticinta;//靜態(tài)局部變量,有全局壽命,局部可見(jiàn)。
intb=-10;//b,c為局部變量,具有動(dòng)態(tài)生存期。
intc=0;
voidfnOther();//函數(shù)原型聲明
cout<<"---MAIN---\n";//i:1a:0b:-10c:0
cout<<"g:"<<g<<"a:"<<a<<"b:"<<b<<"c:"<<c<<endl;c=c+8;
fnOther();
cout<<"---MAIN---\n";//I:33a:0b:-10c:8
cout<<"g:"<<g<<"a:"<<a<<"b:"<<b<<"c:"<<c<<endl;g=g+10;
fnOther();return0;}28課件制作5.15生命期與可見(jiàn)性voidfnOther(){
staticinta=2;staticintb;//a,b為靜態(tài)局部變量,具有全局壽命,局部可見(jiàn)。
//只第一次進(jìn)入函數(shù)時(shí)被初始化。
intc=10;//C為局部變量,具有動(dòng)態(tài)生存期,
//每次進(jìn)入函數(shù)時(shí)都初始化。
g=g+32;a=a+2;c=c+5;
cout<<"---OTHER---\n";
cout<<"g:"<<g<<"a:"<<a<<"b:"<<b<<"c:"<<c<<endl;b=a;//①i:33a:4b:0c:15}//②i:75a:6b:4c:15運(yùn)行結(jié)果:---MAIN---
g:1
a:0b:-10c:0---OTHER---
g:33a:4b:0c:15---MAIN---
g:33
a:0b:-10c:8---OTHER---
g:75a:6b:4c:1529課件制作5.15生命期與可見(jiàn)性ints=0;//函數(shù)定義voidfnRefGlobal(){floats=3.0;
inta=2;
cout<<"inta="<<a<<endl;{floata=2.0;
::a=1;//a不是全局變量,引用出錯(cuò)
::s=1;//對(duì)全局變量s賦值1
cout<<"floata="<<a<<endl;
s=2.0;//對(duì)全局變量s賦值2.0}
cout<<"inta="<<a<<endl;
cout<<"floats="<<s<<endl;}
30課件制作5.16變量屬性小結(jié)一個(gè)變量除了數(shù)據(jù)類(lèi)型以外,還有3種屬性存儲(chǔ)類(lèi)別:C++允許使用auto,static,register和extern4種存儲(chǔ)類(lèi)別作用域:程序中可以引用該變量的區(qū)域生命期:指變量在內(nèi)存的存儲(chǔ)期限以上3種屬性是有聯(lián)系的,程序設(shè)計(jì)者只能聲明變量的存儲(chǔ)類(lèi)別,通過(guò)存儲(chǔ)類(lèi)別可以確定變量的作用域和生命期auto,static和register3種存儲(chǔ)類(lèi)別只能用于變量的定義語(yǔ)句中31課件制作5.16變量屬性小結(jié)從作用域角度分,有局部變量和全局變量局部變量自動(dòng)變量,即動(dòng)態(tài)局部變量(離開(kāi)函數(shù),值就消失)靜態(tài)局部變量(離開(kāi)函數(shù),值仍保留)寄存器變量(離開(kāi)函數(shù),值就消失)形式參數(shù)(可以定義為自動(dòng)變量或寄存器變量)全局變量靜態(tài)外部變量(只限本文件引用)外部變量(即非靜態(tài)的外部變量,允許其他文件引用)32課件制作5.16變量屬性小結(jié)從變量生命期(存在的時(shí)間)來(lái)區(qū)分,有動(dòng)態(tài)存儲(chǔ)和靜態(tài)存儲(chǔ)兩種類(lèi)型。靜態(tài)存儲(chǔ)是程序整個(gè)運(yùn)行時(shí)間都存在,而動(dòng)態(tài)存儲(chǔ)則是在調(diào)用函數(shù)時(shí)臨時(shí)分配單元?jiǎng)討B(tài)存儲(chǔ)自動(dòng)變量(本函數(shù)內(nèi)有效)寄存器變量(本函數(shù)內(nèi)有效)形式參數(shù)靜態(tài)存儲(chǔ)靜態(tài)局部變量(函數(shù)內(nèi)有效)靜態(tài)外部變量(本文件內(nèi)有效)外部變量(其他文件可引用)33課件制作5.16變量屬性小結(jié)從變量值存放的位置來(lái)區(qū)分,可分為內(nèi)存中靜態(tài)存儲(chǔ)區(qū)靜態(tài)局部變量靜態(tài)外部變量(函數(shù)外部靜態(tài)變量)外部變量(可為其他文件引用)內(nèi)存中動(dòng)態(tài)存儲(chǔ)區(qū):自動(dòng)變量和形式參數(shù)CPU中的寄存器:寄存器變量關(guān)于作用域和存儲(chǔ)期的概念:對(duì)一個(gè)變量的性質(zhì)可以從兩個(gè)方面分析,一是從變量的作用域,一是從變量值存在時(shí)間的長(zhǎng)短,即生命期。前者是從空間的角度,后者是從時(shí)間的角度。二者有聯(lián)系但不等同34課件制作5.16變量屬性小結(jié)35課件制作5.16變量屬性小結(jié)變量的可見(jiàn)性如果一個(gè)變量在某個(gè)文件或函數(shù)范圍內(nèi)是有效的,則稱(chēng)該文件或函數(shù)為該變量的作用域,在此作用域內(nèi)可以引用該變量,所以又稱(chēng)變量在此作用域內(nèi)“可見(jiàn)”,這種性質(zhì)又稱(chēng)為變量的可見(jiàn)性自動(dòng)變量和寄存器變量在函數(shù)內(nèi)的可見(jiàn)性和存在性是一致的靜態(tài)局部變量在函數(shù)外的可見(jiàn)性和存在性不一致靜態(tài)外部變量和外部變量的可見(jiàn)性和存在性是一致的static聲明使變量采用靜態(tài)存儲(chǔ)方式,但它對(duì)局部變量和全局變量所起的作用不同對(duì)局部變量來(lái)說(shuō),static使變量由動(dòng)態(tài)存儲(chǔ)方式改變?yōu)殪o態(tài)存儲(chǔ)方式。對(duì)全局變量來(lái)說(shuō),它使變量局部化(局部于本文件),但仍為靜態(tài)存儲(chǔ)方式36課件制作5.17編譯預(yù)處理目的:改進(jìn)程序設(shè)計(jì)環(huán)境,提高編程效率C++提供的預(yù)處理功能主要有以下3種宏定義:#define文件包含:#include條件編譯:#ifdef,#ifndef分別用宏定義命令、文件包含命令、條件編譯命令來(lái)實(shí)現(xiàn)。為了與一般C++語(yǔ)句相區(qū)別,這些命令以符號(hào)“#”開(kāi)頭,而且末尾不包含分號(hào)預(yù)處理命令是C++統(tǒng)一規(guī)定的,但是它不是C++語(yǔ)言本身的組成部分,不能直接對(duì)它們進(jìn)行編譯必須正確區(qū)別預(yù)處理命令和C++語(yǔ)句,區(qū)別預(yù)處理和編譯,才能正確使用預(yù)處理命令37課件制作5.17編譯預(yù)處理宏定義指令:#define用#define命令將一個(gè)指定的標(biāo)識(shí)符(即宏名)來(lái)代表一個(gè)字符串定義宏的作用一般是用一個(gè)短的名字代表一個(gè)長(zhǎng)的字符串定義宏的一般形式為:#define
標(biāo)識(shí)符字符串,如:
#definePI3.1415926
已被C++的const定義語(yǔ)句所代替:constfloatPI=3.1415926;用#define命令定義帶參數(shù)的宏定義,已被C++的inline函數(shù)所代替
#defineMax(a,b)a>b?a:binlineint
Max(int
a,intb){returna>b?a:b;}38課件制作5.17編譯預(yù)處理頭文件包含指令:#include作用:一個(gè)源文件可以將另外一個(gè)源文件的全部?jī)?nèi)容包含進(jìn)來(lái),即將另外的文件包含到本文件之中include命令的兩種形式#include<文件名>:編譯系統(tǒng)到系統(tǒng)目錄中尋找要包含的文件,如果找不到,編譯系統(tǒng)就給出出錯(cuò)信息#include"文件名":編譯系統(tǒng)先在用戶(hù)當(dāng)前目錄中尋找要包含的文件,若找不到,再按標(biāo)準(zhǔn)方式查找39課件制作5.17編譯預(yù)處理頭文件包含指令:#include關(guān)于C++標(biāo)準(zhǔn)庫(kù)在C++編譯系統(tǒng)中,提供了許多系統(tǒng)函數(shù)和宏定義,而對(duì)函數(shù)的聲明則分別存放在不同的頭文件中。如果要調(diào)用某一個(gè)函數(shù),就必須用#include命令將有關(guān)的頭文件包含進(jìn)來(lái)新的C++標(biāo)準(zhǔn)庫(kù)中的頭文件一般不再包括后綴.h,例如
#include<iostream.h>//C形式的頭文件
#include<iostream>//C++形式的頭文件效果基本上是一樣的,建議盡量用符合C++標(biāo)準(zhǔn)的形式,即在包含C++頭文件時(shí)一般不用后綴如果用戶(hù)自己編寫(xiě)頭文件,可以用.h為后綴40課件制作5.17編譯預(yù)處理?xiàng)l件編譯希望程序中某一部分內(nèi)容只在滿(mǎn)足一定條件時(shí)才進(jìn)行編譯,也就是指定對(duì)程序中的一部分內(nèi)容進(jìn)行編譯的條件;如果不滿(mǎn)足這個(gè)條件,就不編譯這部分內(nèi)容,這就是“條件編譯”。條件編譯命令常用的有以下形式其他常見(jiàn)條件編譯指令:#ifndef,#undef(1)#ifdef
標(biāo)識(shí)符程序段1#else
程序段2#endif(2)#if表達(dá)式程序段1#else
程序段2#endif#if_MSC_VER>1000#pragmaonce#endif#ifdef__cplusplus#ifndef_INC_IOSTREAM#define_INC_IOSTREAM#if!defined(_WIN32)&&!defined(_MAC)#errorERROR:OnlyMacorWin32targetssupported!#endif41課件制作5.17編譯預(yù)處理/****iostream.h-definitions/declarationsforiostreamclasses*Copyright(c)1990-1997,MicrosoftCorporation.Allrightsreserved.*****/#if_MSC_VER>1000#pragmaonce#endif#ifdef__cplusplus#ifndef_INC_IOSTREAM#define_INC_IOSTREAM#if!defined(_WIN32)&&!defined(_MAC)#errorERROR:OnlyMacorWin32targetssupported!#endif42課件制作5.17編譯預(yù)處理輸入一個(gè)字母字符,設(shè)置條件編譯,使之能根據(jù)需要將小寫(xiě)字母改為大寫(xiě)字母輸出或?qū)⒋髮?xiě)字母改為小寫(xiě)字母輸出,要求用兩種形式的條件編譯命令實(shí)現(xiàn),即:1#ifdef
標(biāo)識(shí)符 2#if表達(dá)式程序段1 程序段1#else #else
程序段2 程序段2#endif
#endif43課件制作5.17編譯預(yù)處理#include<iostream>#defineLETTER
usingnamespacestd;intmain(){charch,ch1;
cout<<"請(qǐng)輸入一字符:";
cin>>ch;
#ifdefLETTERif(ch>='a'&&ch<='z') ch1=ch-32;
#elseif(ch>='A'&&ch<='Z') ch1=ch+32;
#endif
cout<<"Yourinputis:"<<ch<<","<<ch1<<endl;return0;}
#ifdef
標(biāo)識(shí)符程序段1 #else
程序段2 #endif
44課件制作5.17編譯預(yù)處理#include<iostream>#defineLETTER2//1小寫(xiě)轉(zhuǎn)大寫(xiě),2大寫(xiě)轉(zhuǎn)小寫(xiě)usingnamespacestd;intmain(){charch,ch1;
cout<<"請(qǐng)輸入一字符:";
cin>>ch;
#ifLETTER>1if(ch>='a'&&ch<='z') ch1=ch-32;
#elseif(ch>='A'&&ch<='Z') ch1=ch+32;
#endif
cout<<"Yourinputis:"<<ch<<","<<ch1<<endl;return0;}#if表達(dá)式程序段1#else
程序段2 #endif
45課件制作5.18頭文件與多文件結(jié)構(gòu)一個(gè)較大的程序一般的做法是:把一個(gè)大的程序劃分為若干個(gè)程序模塊(即程序文件),每一個(gè)模塊實(shí)現(xiàn)一部分功能,不同的程序模塊可以由不同的人來(lái)完成在程序進(jìn)行編譯時(shí),以程序模塊為編譯單位,即分別對(duì)每一個(gè)編譯單位進(jìn)行編譯;如果發(fā)現(xiàn)錯(cuò)誤,可以在本程序模塊范圍內(nèi)查錯(cuò)并改正;在分別通過(guò)編譯后,才進(jìn)行連接,把各模塊的目標(biāo)文件以及系統(tǒng)文件連接在一起形成可執(zhí)行文件在一個(gè)程序文件中可以包含若干個(gè)函數(shù)。無(wú)論把一個(gè)程序劃分為多少個(gè)程序模塊,只能有一個(gè)main函數(shù),程序總是從main函數(shù)開(kāi)始執(zhí)行的46課件制作5.18頭文件與多文件結(jié)構(gòu)在程序運(yùn)行過(guò)程中,由主函數(shù)調(diào)用其他函數(shù),其他函數(shù)也可以互相調(diào)用……一個(gè)大項(xiàng)目程序文件程序文件……程序
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025屆廣東省茂名市五大聯(lián)盟學(xué)校英語(yǔ)高三上期末質(zhì)量檢測(cè)模擬試題含解析
- 河南省鶴壁市2025屆高二上數(shù)學(xué)期末教學(xué)質(zhì)量檢測(cè)試題含解析
- 2025屆江蘇省連云港市灌南縣二中數(shù)學(xué)高三第一學(xué)期期末質(zhì)量跟蹤監(jiān)視模擬試題含解析
- 內(nèi)蒙古烏海市烏達(dá)區(qū)2025屆高二上數(shù)學(xué)期末檢測(cè)模擬試題含解析
- 廣西欽州港經(jīng)濟(jì)技術(shù)開(kāi)發(fā)區(qū)中學(xué)2025屆高二生物第一學(xué)期期末教學(xué)質(zhì)量檢測(cè)試題含解析
- 2025屆新疆烏魯木齊市第四中學(xué)高二生物第一學(xué)期期末調(diào)研模擬試題含解析
- 北京市重點(diǎn)中學(xué)2025屆高三數(shù)學(xué)第一學(xué)期期末質(zhì)量檢測(cè)模擬試題含解析
- 湖南衡陽(yáng)常寧市第五中學(xué)2025屆高二上數(shù)學(xué)期末監(jiān)測(cè)試題含解析
- 2025屆吉林省長(zhǎng)春市汽車(chē)經(jīng)濟(jì)技術(shù)開(kāi)發(fā)區(qū)第六中學(xué)高三生物第一學(xué)期期末復(fù)習(xí)檢測(cè)試題含解析
- 2025屆湖南省邵陽(yáng)市邵東縣第四中學(xué)高三數(shù)學(xué)第一學(xué)期期末調(diào)研試題含解析
- 人教版(2019)必修第一冊(cè)Unit 3Sports and fitness 詞匯課件(11張ppt)
- DB37∕T 5158-2020 地螺絲微型鋼管樁技術(shù)規(guī)程
- 罰函數(shù)法(SUMT法)課件
- 班組建設(shè)與管理PPT課件
- 國(guó)貿(mào)雙語(yǔ)--課件--國(guó)際貿(mào)易的支付方式
- (完整版)圓的認(rèn)識(shí)練習(xí)題
- 玻璃鋼的基本性能詳解
- 固定資產(chǎn)與無(wú)形資產(chǎn)管理制度
- 液壓泵站使用說(shuō)明
- SPC八大控制圖自動(dòng)生成表
- 國(guó)家電網(wǎng)公司用電信息采集系統(tǒng)運(yùn)行維護(hù)管理辦法
評(píng)論
0/150
提交評(píng)論