版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第一章
1
在本章中,我何揩回H一些言十算檄概^的基本知WL藉
由道些基本知暹而擘雪霜月皆的程式言殳言十。除此之外,
我何也揩金十封C言吾言的褊群器及軌行猿境做一些^明,加
弓金^者在往彳爰章功「中幺柬雪靶例日寺所需要的基本知言戢。
2
大銅I
?1.1重月普硬te
-1.1.1算數(shù)暹率苴軍元(ArithmeticandLogicUnit)
-1.1.2控制罩元(ControlUnit)
-1.1.3言己t意骨亶罩元(MemoryunitandStorageUnit)
-1.1.4卓俞入罩元(Inputurdt)
-1.1.5片俞出覃元(Outputunit)
?1.2
?1.3程式言吾言
-1.3.1檄器者吾言
-1.3.2低P皆言吾言
-1.3.3高B酊吾言
?1.4(:言吾言曾介
?1.5程式^^流程典褊群器
-1.5.1(^吾言程式的^^流程
-1.5.2編群器(Compiler)【未甫充】
-1.5.3整合|^考姜If境(IDE;IntegratedDevelopmentEnvironment)
?1.6褊群器典程式變^例
-1.6.1GCC褊群器
-1.6.2Dev?C++整合^^IB境
-1.6.3BorlandC++Builder
?1.7本章回展真及下章JR霓
1.1重月做硬it
?硬醴就是您可以看到的重月窗器殳借(拆II外段),不謾若光是it棣形容
硬18未免謾於曾罩。除上,若彳住功能面加以顯分,可符重月第硬醴分
懸5大軍元(如下圈),5彳固軍元分別負(fù)責(zé)不同的工作。
-6主】:
算數(shù)暹輯罩元典控制軍元
合耦中央J8理罩元(就是
常醵到的CPU),中央慮理
軍元和主言己I意醴刖
的核心部分,其繪的周遏
B5ffi(輸入軍元典輸出
軍元)必須典之速留吉,
透謾中央慮理罩元的控制
,使周遏常正常建作。
*資料流?控制機(jī)St
5
1.1.1算數(shù)暹It罩元
?算數(shù)暹單茸罩元(曾耦A(yù)LU)是軌行程式中各類去S算的^18罩
位。造些建算即可以分懸雨大類必算數(shù)建算典iMil算。算
1^8算包含加、減、乘、除等等的數(shù)值建算,而iMil算即
包含AND、OR、NOT、移位等位元/位元^的暹單苴建算。
6
1.1.2控制軍元
?控制軍元(曾耦CU)的功能懸控制流程及憤言周輸入、輸出、
言刖意、算數(shù)暹tt等4大罩元的建作。控制罩元中包含(1畝己^
指令作何真序的微程式(microprogram)、(2)取得卡一指令
的iM霜路(3清回勤元件的解碼器(decoder)及(4)冢多il攆
器(multiplexer)。
-常指令迤入CPU之彳爰,控制元件畬先迤行指令解碼(Decode),加按照
指令槿亍封鷹的微程式,彝出不同的^虢完成^指令所需要完成
的各^功能,最彳爰孰行暹申苴重路以便取得下一他指令。
7
1.1.3言刖意tl罩元
?言刖意18罩元分懸主言刖意I8(mainmemory)奧申甫助言刖意18
(secondarymemory),主要功能是用來儲存資料(程式也是
一槿資料),任何要被軌行的程式都必須放置於主言刖意醴中,
CPU才能存取^程式,封於新型的作槊系統(tǒng)而言,畬揩部分
的申甫助言川意ti常作是虛掇的主言刖意醴以便解決程式謾多或謾
大而瓢法完全戴入主意刖意te的冏題。
8
1.1.3言己]意fg軍元
-主言己I意t亶(又稠卷內(nèi)部言己I意t亶),目前以半醇f要元件制成,特性卷存取速度
快、成本高。主言由意醴依照存取特性又可以分卷隨檄存取言己情醴(Random
AccessMemory;曾耦RAM)及唯^三己t意首要(ReadOnlyMemory;ffiffiROM)o
-RAM的成本較低,但是輾法於重力消失畤保存資料,故卷揮樊性言書意醴的一
ttoROM成本較高,但谷|J可以在輾重力的冊下保存資料,傅統(tǒng)的ROM只能
嘉入資料一次,因此通常只曾把做勤重月留所需要的小程式儲存在ROM貍面,
例如BIOS就是使用ROM做卷言己|意醴。
-【言主】:目前ROM已^^^成可以重^離入資料,例如:EPROM.
EEPROM等。其中的『P』懸Programmable的縮猱和懸可程式化的
ROM,清除原本資料的方式即輿RAM有所不同,例如使用紫外氐泉清除資
料以及較高重屋清除資料。但成本仍比一般的RAM高出言午多。
-$1助言己想醴(又耦懸外部言時意醴),目前以磁性物醴或光擘材料幺且成,例如:
硬碟檄、勒碟片、光碟片。隼甫助言己1'意醴的存取速度相封於主言己I意颼慢了數(shù)十
倍以上,但裂作成本刖比主官己I意颼低了數(shù)十倍以上,因此遹合儲存大量的資
料。
9
1.1.4輸入軍元
?輸入罩元是「具有輸入功能的遇遏者殳借」,例如維黑、滑鼠、
搖捍等等。使用者可以藉由適些輸入裝置典重月皆取得蒲通的
管道。
10
1.1.5輸出軍元
輸出軍元恰典輸入罩元相反,所有「具有輸出功能的皆腐輸出軍元
的元件,主要功能是符程式軌行的《吉果(文字、磬音、影像)輸出或Si示。
常見的輸出裝置有簧幕、印表檄等等。某些遇同畤具有輸入輿輸出
的功能,例如:斶控式蜜幕、畬震勤的搐悍等等。
-n±l:望寸於Linux/Unix作渠系統(tǒng)而言,任何除了CPU典主言己|意醴之外的^^
都可揩之視卷遇諼翰出入因此,硬碟檄也被視卷輸出入的裝置
(device),如果您舉寸Linux指令熟悉的言舌,可以很曾軍的把原本^^輸出到
簧幕的文字,醇換卷輸出到槽案。
11
1.2重月昔軟tl
?重月窗軟18分懸資料典程式雨大類必事^上不^是哪一類隊(duì)都是以0、1的二
位元表示法信者存在重月留言殳借中(例如:信者存於硬碟檄中)。而程式又可以
分卷系統(tǒng)程式(SystemProgram)典Jffi用程式(ApplicationProgram)。
系統(tǒng)程式一般卷較接近硬醴底Jf的低P皆程式,例如:作棠系統(tǒng)(Operating
System)、編群程式(Compiler)、幺且群程式(Assembler),遵名吉程式(Linker)
等都腐於系統(tǒng)程式。鷹用程式即是架橫在系統(tǒng)程式之上,依撼某槿特殊需
求而^^出來的敢:18,例如:Office.幔矜系統(tǒng)、霜月留遁激等等。
待解決的冏勒
服用程式
泉統(tǒng)程式
系統(tǒng)程式典愿用程式信融系III系統(tǒng)程式典鷹用程式陷Jflll
12
1.3程式^言
?言吾言的用途是做懸人典人潢通的槁卞梁,例如:和美閾人交^
就要用英文潢通。同棣地,人若要和重月皆潢通的言舌,就必須
使用重月皆『懂』的言吾言,道槿言吾言耦卷程式言吾言
(ProgrammingLanguage)。而一般我相號用來典人潢通的言吾
言用J耦懸自然言吾言(NaturalLanguage)o
-程式^言依摞輿自然言吾言的相似度又可以分卷3槿:檄器^言、低陷
三吾言及高P皆言吾言。其中高^^言典人類:!所使用的自然言吾言最懸相近,
而檄器^言即和人^所使用的言吾言南$a北轍。
13
1-3程式言吾言
IS1-6程式^言分^
14
131械器^言
?榛器言吾言(MachineLanguage)是重月皆硬醴唯一看得懂的言吾
言,換句者舌言兌,檄器言吾言就是一速串的0、1二暹位數(shù)字^合,
因此又耦懸檄器碣。一般人通??床欢佬?、1所代表的特
殊涵羲,其^^於重月皆而言,造些0、1的^合數(shù)字,可能代
表某槿資料,也可能代表某他指令。由於大多數(shù)的人瓢法了
解或言刖意道一速串0、1數(shù)字所代表的涵羲,因而贊展了低P皆
言吾言典高P黯吾言。
-nii:瓷料或程式碓^是用二暹位表示,但有的畤候卷了縮短道一
速串的二迤位數(shù)字表示,某些善籍或軟醴畬符檄器^言使用16暹制來
加以表逵。例如:01001001->49Ho
15
1.3.2低P皆^言
?低卜皆言吾言(Low-levelLanguage)是一槿接近於檄器者吾言的
表示方法,不謾?quán)S使用人^比較容易言日意的罩字形式來封鷹
一建串的0、色且合。最典型的低隋言吾言就是^合言吾言
(AssemblyLanguage)。在否且合言吾言中,使用建算子典iS
算元來表示一速串的0、色且合,而造些建算子即使用類期以英
文的縮嘉以利人類鼬勺言刖意典理解,例如:使用INC來代表
Increment(累加指令)。
16
1.3.2低P皆^言
8051檄器音吾言指令8051幺且合言吾言指令息我
00000100INC軌行累加1
10000100DIV軌行除法
805保且合^言指令輿檄器^言指令的莖打fi
-在上表中,很明^的可以看出,名且合言吾言的指令典檄器者吾言的指令是
一舉寸一的封鷹信”系,但是郤比檄器言吾言容易言乎意,除此之外,其他^
合言吾言的言殳言十都典檄器者吾言的言殳言十相同,我相弓可以徙下表中更明碓地
看出雨者的相同輿相巽慮:
x86檄器冒吾言x86幺且合音吾言意羲
0000001111001000ADDCX,AX軌行暫存器加法
101110010011010000010010MOVCX,1234H招CX暫存器的值指定卷1234H
x86,^合^言輿檄器^言的舉寸JS
17
1.3.2低P皆^言
-由上述的雨彳固表格中,我年號可以得知襄件事,(1舔且合言吾言比檄器言吾言
更接近人^所使用的自然言吾言。(2)不同的CPU所使用的幺且合言吾言也不
相同。(3)任何一彳固完整的幺且合^言指令恰好封鷹一幺且檄器^言的0、1
由歹ijO
?冬且合言吾言典檄器言吾言一封一的特性,使得^合言吾言可以完全
掌控重月皆的硬醴幺吉橫,如此一來,在軌行效率上自然也就完
全交由程式者殳言十白而決定。不謾,由於不同的CPU必須使用不
同的^合言吾言加且必須封於^CPU的aiMtw吉情有充分熬知,
因此,道槿低隋言吾言仍營瓢法被女色大多數(shù)的人所接受,因而
I變展了更接近於人類直自然言吾言的高p皆言吾言。
?ti±]:幺且群程式(Assembler)是一槿用來揩^合^言醇換卷檄器
^言的一套程式,相較於其他系統(tǒng)程式而言,余且群程式於一槿
比較容易II樊的系統(tǒng)程式。
18
1.3.3高P器吾言
?余且合言吾言雖隹然比檄器者吾言更接近於自然言吾言,但幺且合言吾言的程式言殳言十白市必
須封於軌行程式的慮理器有更多的了解,或且每彳固慮理器的《且合言吾言加不
相同,因此,一槿比《且合言吾言更接近自然言吾言且不因更換檄器而改建言吾法
的程式言吾言也被贊展出來,此槿言吾言就是高P皆言吾言。
?高P器吾言(High-levelLanguage)使用更接近人類比思W隹的方式來言殳言十程
式,常程式言殳言十完成之彳爰,必須通謾另外一些翻群程式的翻群彳奏才能別被
^亍。高P皆言吾言的建算子通常具有比敕弓拿大的功能,因此,軍一行的
高P皆言吾言程式可能被翻群成家午多的檄器礁以便完成^^的工作。
-依摞手^的不同,我憑可以揩高P皆言吾言II分成編群式言吾言典直群式言吾言。編
言睪式^言的翻群程式穗卷編群器(compiler),而直群言吾言的翻群程式穗卷直
群器(interpreter)。由於編群器典直^器比起幺且群器的功能更卷弓金大及親隹,
因止匕高P酊吾言通常具肴較高的硬馥孑蜀立性(machineindependent,,也就是
具有可摧性(portable)0換句者舌言兌,常您在At!器上所撰離的高^^言程式,
如果想要拿到B81器上軌行畤,通常不需要修改程式或只需要小幅度的修改,
因卷您只需要更換另外一套在B檄器上軌行的編群器或直^器就可以符程式重
新翻音睪加在Bt?器上正碓軌行。
19
1.3.3高P器吾言
褊百睪式百吾R
-編群器探用整批作渠(Batch)方式來慮理程式翻群的工作,換句^
者兌,富我件設(shè)各程式^言十完罩加交由編群器翻群之彳爰,編群器畬揩翻群
結(jié)果存成一彳固目的槽(objectfile),而造彳固目的槽可^由速結(jié)其他目
的槽及程式廛之彳爰形成可軌行槽(executefile),或由重月皆直接軌行。
常兄的編者睪式言吾言有C、C++(編者睪器卷gcc、g++、VC++>BCB)、
Pascal、ObjectPascal(編]睪器卷Delphi、Kylix)等等。
-編群式^言使用模條且化技巧,也就是把某些具有特殊功能的片段程式
褐立成一彳都固的函式,加揩之集合成一彳固函式槽案,如此一來,就
可以^需要使用^功能的程式透遇速結(jié)的方式加以結(jié)合,縮短撰嘉程
式的畤?yán)纾篈NSIC的math函式廛中就包含言午多求三角函數(shù)的
函式,所以我憑企不需要自行撰嘉求三角函數(shù)的辭幺出步驟,只要在需
要求三角函數(shù)值日札弓用Math函式廛即可。一彳固基本編群式^言的程
式慮理流程如下圃。
20
1.3.3高陪言吾言
原始程式槽
一
編群式言吾言的程式慮理流程
21
1.3.3高P皆^言
?直吉睪式言吾言
-直群器典編群器慮理程式的步驟不同,常我憑使用直言睪式言吾言撰嘉程式完
加使用直言睪器來翻群程式畤,加不畬羥生目的槽或可軌行槽。直群器畬招程
式一行一行的^入,逐行翻言睪加送交由雷月皆孰行,因此,每一次要軌行編群
式^言程式畤,都必須做勤直言睪器來重新翻言睪程式。也正因卷如此,所以常
程式中有金昔^^生日寺,前面沒有金昔一^的程式仍畬被軌行,加且停留在金昔^的
那一行程式,因此較遹合用於程式^^謾程,道一黠即典褊言睪式言吾言完全不
同。所以,直群器具有盛督軌行狀況的效果。常兄的JavaScript、VBScript、
Python等都腐於直群式^言。
直群式^言的程式慮理流程
22
1.3.3高P器吾言
?:
-近年央,由於整合式^考酎袁境(IntegratedDevelopmentEnvironment,
IDE)的樊展,使得編群式^言也同檬可以具有盛督程式逐行軌行的能力,因
此,也改善了編言睪程式變除金昔的困國隹。
?仁蓼^輿探言寸】:
-在前面提謾(^吾言是編群式言吾言,但事^真的是如此嚅?其^^是有^^的。
言午多老自幣及作者在^本(包含本耆某些部分)或授音果謾程中,都畬揩C、C++
等耦卷編群式^言,但事^上,在冢多程式言吾言的原文娶余空等級善籍中,彳定
未看到此^敘述。道是由於程式言吾言原本就沒有造槿分類乳編群器典直群器
只不謾是^^程式的工具。例如一般我優(yōu)畬使用C的編者睪器來褊群C程式,但
事^上,屣史也曾^出現(xiàn)謾言午多特定用途的C直群器(Interpreter),例如
Stanford大擘的ThetisCInterpret6r以及趣高P皆言吾言的CH(supersetofC
interpreter)o若有典趣者,可至下列翁站內(nèi)言旬。
?ttp:///
?/CH/
23
1.4(^吾言曾介
?(^吾言典C+十言吾言有著奧妙的信引系,因此有人需兌,C++是言的延伸,
也有人言兌,C++是一槿全新的言吾言。道雨槿言兌法都算正碓,因卷C++是使
用基本的。言吾言言吾法,但C++更重要的是一槿全新的物件醇向覲念。在本
^中,我件設(shè)各分別介貂道雨槿言吾言的特色典JB史背景。
?C吉吾言是在70年代,由同豳^室的KenThompson輿DennisRtchie共同
贊展的一套重月爵者吾言,^版本耦懸K&RC。之彳食美閾閾家檄型癌畬
(ANSI)於1983年符(3言吾言檄型化,制言丁出一套才票型的言,
ANSI-C(於1988年完成制定),版本界J卷各槿吾言編群器統(tǒng)一支援
的版本,其^法官青兄附至象£。
-有了檄型之彳爰,(:言吾言便具有可^性。除此之外,由於言不但具有指襟可
以直接存取言己ts醴的資料,加且又是高隋言吾言中最低P皆的一槿程式言吾言,例
如,(:言吾言可以在某些璟境下操控硬醴資源,甚至於是直接嵌入幺且合言吾言(不
謾常您使用適些指令的日寺候,揩畬降低言原本的可摧性)。以上槿槿,使
得言成卷一他非常成功的言吾言,加且在之彼加入物件醇向形成c++言吾言,
因此,直到目前卷止,C及C++仍是最多程式言殳言十白幣所使用的程式^言。
24
1.4(^吾言曾介
-言的樊展屣史有其特殊背景,(^吾言原本不叫做。言吾言,而是另一槿程式
言吾言B言吾言,KenThompson輿DennisRitchie麗人卷了言殳言十UNIX作渠系統(tǒng),
因此揩8言吾言加以延伸卷言,由於具有容易效率高及可操控硬18等
特性,因此同棣是由^室所樊展的UNIX系統(tǒng),系統(tǒng)核心的大部分程式
礁都是使用C來撰嘉,加且在UNIX作渠系統(tǒng)中的公用程式及言的編者睪器也
是由C所撰離的。
?[Q]:卷何C的編群器程式可以用C來撰離呢?那用來撰嘉編言睪器的C程
式又必須用什麼束西來編言睪呢?答案富然也是褊群器哪,但造彳固編群器又
是用什麼言吾言撰嘉而成的呢?冏堰,日寺常是初阜程式^言^者心中的
一大疑冏。(一槿程式^言的第一彳固褊群器是如何嘉成的呢?)
?[A]:其^最基本的C褊群器^^是由名且合^言來撰嘉的,但是造彳固基
本編群器只提供了黑彳固曾罩的C指令(例如:10彳固指令),然彳爰我憑就可
以利用道10彳固指令央撰嘉提供更多指令的C編群器,如此遇而彳復(fù)始,編群
器所提供的(:言吾言指令就越來越多,直到符合所有ANSI-C所定羲的指令卷
止,如此一來,除了最基本的編群器是由幺且合意吾言完成的之外,其繪贊展
中各陷段的編群器就是使用高隋言吾言撰嘉的,道槿技巧,在編群器的彝
展理^中常??梢钥吹?。
25
1.4(:言吾言曾介
?命令式型魅程式吾吾言(ImperativeParadigmProgramming
Language)
-命令式型魅的程式言吾言是透iS一速串指定敘述(assignstatement舔且合
而成,指定敘述是表示式(expression),招一些子}8算式加以余且合,只
要依序孰行造些敘述就可以得到余吉果,(^吾言是一槿命令式型魅的程
式言吾言,其他^如BASIC、PascaKFORTRAN.COBOL等也都腐於
此類型里三
x=x+1;
-上述是一他明了晶鼎於命令式型熊的程式言吾言。
而上述的51算式,若以敷擘式子來表示,M'J^xt+1=xt+1,其中t代表
畤札
-命令式型魅的言吾言通常提供了黑槿基本的控制流程結(jié)橫,包含循序流
程結(jié)橫、51攆流程結(jié)情、圈流程結(jié)橫等等,我機(jī)設(shè)務(wù)在本耆中陛^介
貂道黑槿流程控制。
26
1.4(:言吾言曾介
?令吉橫化程式言吾言(StructuralProgrammingLanguage)
-(3言吾言是一槿幺吉橫化程式^言,也就是探用結(jié)情化分析言殳言十的方法,
招冏題由上向下,由大到小切割成^多子冏題,分別尊得子冏題的解
答,最彳爰再結(jié)合起來解決所要解決的冏題。造槿方法,也可以耦卷模
^化言殳言十。解泱子冏題的方法被分成一彳即固的模區(qū)且,在言中即稀
卷函式。在C的程式^言十中,程式言殳制喑幣必須^言十3線且合適些函式來
解決冏題。
-除此之外,一彳固東吉情化的程式言吾言遢有另一項(xiàng)重要的特性,也就是使
用for、while等脩件式退圈來取代gotolM條件跳ES指令。(:言吾言是令吉情
化的程式言吾言,雖隹然它仍提供了got。敘述(在言中,指令被未再之
卷敘述),但郤建^使用者離不得已不要使用goto敘述。
27
1.4(^吾言曾介
?C++物件醇向程式言吾言(OOPL;Object-Oriented
ProgrammingLanguage)
-(:言吾言在贊展超大型程式畤遇到了一些雉言要上的困It,因此俊來賓豳
^室的BjarneStroustrup博士符C言吾言加上物件醇向言殳言十(00口;
Object-OrientedDesign)而成卷C++言吾言。曾軍的言兌,C言吾言可以^
C++言吾言的子集,而更明硅的含兌,C++是基於C的^法或加上物件醇向
覲念所橫成的一槿新的程式^言,因此我件號可以符C++輿C以集合昌昌
彳系加以表示如下置I。
C++
物件擎向一-
C
28
1.4(^吾言曾介
-彳隹上圈可知,(3言吾言是C++言吾言中,除了OOP概念以外的部分。所以
一般常II到的C++程式言殳言十,其^也已^包含了C程式音殳言十。由於C++
言吾言推廉非常I慢利,加且包含了所有的言言吾法,因此,目前黑乎
沒有余屯。言吾言的編群器了,而大多數(shù)程式言殳言十白幣都畬使用C++編群器
來編者睪C言吾言程式。
-明^地,c++言吾言比言^^一些,因此,可以完成更大型的程式。
但由於言的效率以及更接近硬t亶的特性,因此,在某些弓金烈要求
效率的埸合中(例如:撰嘉作渠系統(tǒng)及^勤程式),我相號仍畬使用觸
(^吾言(有畤輿幺且合^言配合)而不使用c+十言吾言來言殳言十程式。
29
1.5程式^^流程典編群器
?言吾言程式完成彳灸,必須^謾褊群才能賀(被軌行,在附^
中,我例列出了^多可以褊群(^吾言的褊群器,除此之外,在
本皆「中,我相號也揩金十舉寸c言吾言褊群器的基本11念加以^明,建
立一些^於c言吾言褊群器的基本覲念。
30
1.5.1(^吾言程式的流程
多變?nèi)魏务廴菏秸呶嵫猿淌?/p>
都有一定的流程(如右
H),(^吾言的愿用
程式也同檄可以透謾下圈
流程加以完成。
#include槽案
3目的槽
其他
(objfile)目的碣
4-----------------程式康槽案
速結(jié)器(.lib)
_________;M可軌行槽
01-10程式^^流程
1.5.1言程式的^^流程
—Stspl:
-編本苴輿言殳言十程式,您可以使用任何的余屯文字編It器央褊HOC++程式(例
如:Windows的肇言己本、Linux的Vim或pico等等),然彳爰存成副槽名卷
r.cj輿r.cppj的原始程式槽,其中幺屯c言吾言程式可存槽卷r.cj,而包
含C+十言吾法或函式廛的程式即存槽卷『cpp』。
-Step2:
?使用褊者睪器來編群原始程式(例如:GCC的gcc/g++),編■結(jié)果揩是一
一目的命案(objectfile)o
—Step3:
?使用速余吉器符目的程式及其他目的程式典程式康共同速結(jié)成一彳固可軌行槽,
目前大多數(shù)的編群器都具有速幺吉器的功能。
-Step4:
?不^您是在編群謾程或速幺吉謾程中彝生金昔^或甚至是程式本身的暹It出現(xiàn)
金昔^而輾法逵到程式需求畤,都必須迤入俱金部皆段,重新檢查加修正原始
程式中的金昔如此遇而彳復(fù)始,直到程式完成您的需求卷止。
32
1.5.2編群器(Compiler)"甫充】
■傅統(tǒng)褊群器的功能是符原始程式斡換懸目的礁(如下圈懸(:言吾
言褊群器的工作),目的礁中即包含了檄器指令、資料值及
相^位址。就程式考殳言十肺而言,言十高B解吾言程式比較不需
要考It程式軌行的檄器平臺,只要在不同的硬醴幺吉橫,使用
不同的褊群器羥生遹合於^平臺的目的碣即可。
C寺吾言
原始程式目的的
H1-11(^吾言編群器的工作
33
1.5.2編群器(Compiler)"甫充】
?褊群器的工作主要分卷下列5彳郵皆段,加透遇符虢表言己余象程式
中相^的名耦。
轉(zhuǎn)意分析■中礁
哈W?掩描程式■■剖析程式.
原始程八FJ1程式
符虢表
目的的
H1-12編群器的慮理流程
34
1.5.2編群器(Compiler)"甫充】
?(1)描描程式(scanner):
-捕描程式畬描描原始程式內(nèi)容,根摞程式^言的文法,符昌融建字、保
留字、言微別字、51算子、燮數(shù)名穗、資料值等符虢分析出來,而造些
符虢即耦之懸句元(token)。因此,本P皆段的勤作又耦懸新]麋分析
(lexicalanalysis)。
-句元一般以正規(guī)表示式(regularexpression)加以定毒旋且可以使用
有限男犬Sm(firdtestatemachine;麓穗FSM戶兒以^作。換句言益兌,揭
描程式的主要工作是^作道些代表句元的有限狀魅檄,以符程式中的
每一彳固句元分雕出來。表13-1是一彳固燮數(shù)名耦的正規(guī)表示式,它規(guī)定
了只能使用A~Z的英文字母做卷燮數(shù)名穗的第一彳固字元,彳爰面即可以
接上0彳固以上的A~Z字元或0~9字元。
ID==[A-Z][A-Z0-9]*表1-3燮數(shù)名耦的正規(guī)表示式
35
1.5.2編群器(Compiler)"甫充】
intj,z;INIID.ID:
floati;FLOATID;
inik=O,e;INTID-INTEGFR.ID;
k_?2;ID=?INTEGER;
描描程式IDINTEGER'(INTEGER-INTEGER);
e-2*(2-?-3);IDINTEGER+FLOAT;
i_2+9.5:WHILE(ID<0)
whilc(k<0)(scanner)
?ID=ID+INTEGER;
k=k-1;
ID=INTEGFR*INTFGEREXPONENTINTEGER+INTEGER:
z=3*2**2T:ID-ID.INTFGFR;
j=k/9;IDINTEGERINTEGER:
k=5/0;
111-13描描程式的工作
36
1.5.2編群器(Compiler)"甫充】
?⑵剖析程式(parser):
-剖析程式畬依撼程式言吾言的言吾法規(guī)即判定造些句元的排列是否合乎^
法,故此P皆段勤作又木再懸言吾法分析(syntaxanalysis)。
-程式言吾言的言吾法規(guī)用林再之懸文法(grammar),一般使用BNF(Backus-
NaurForm)或EBNF(ExtensibleBNF)來表示,如下表是部分。言吾言的
文法。
compound-statement'.
{declaration-listoptstatement-listopt}
declaration-list'.
declaration
declaration-listdeclaration
statement-list'.
statement
statement-liststatement表1-4(^吾言的部分文法
37
1.5.2褊群器(Compiler)【不甫充】
?(3)言吾意分析程式(semanticroutine):
-言吾意分析程式蒯舒吾法瓢的程式牽事?lián)中IW%(intermediaterepresentation;
ffi?IR)o言吾意分析程式先羥生中^礁幺合最佳化慮理器做暹一步的虞理,而中
^^的格式典名且合^言已^非常接近。
*bCH
*bd
^意分析程式+Ht2
Bt3
semanticroutineta2一
?=
?
01-14中^^靠g例
仁吾法典言吾意的不同】
?吉吾法是程式言吾言的文法格式,而言吾意即是程式的^除意羲。聚例央言兌,假
喜殳有一他心言吾言敘述『c=a+b;』,剖析程式只是判敘述是否合乎C的
言吾法定羲,余吉果富然是合法的C程式敘述。但^除上^意是否合法,即仍
必須判定a,b,c燮數(shù)是否已^宣告謾以及資料型熊是否正碓。
38
1.5.2編群器(Compiler)"甫充】
?(4)最佳化慮理程式(optimizationprocessor):
-它畬揩中^碣迤行最佳化,最佳化即包含封目的礁的大小以及軌行效
率雨槿。加且又可以分卷典檄器瓢^的最佳化以及典檄器有^的最佳
化雨大類短
?(5)目的石焉羥生器(codegenerator):
-它畬符中換卷目的礁。舉寸於只慮理一次的褊群器(one-pass
compiler)而言,由於不畬羥生中^礁,因此,除上是符言吾意分析
程式及羥生目的礁程式合彳并在一起的。而封於可羥生多槿目的礁格式
(re-targetablecompiler)的跨平臺編者睪器(crosscompiler)而言,用J畬透
謾檄器描述槽的憤助,符中換成所需要的檄器目的礁。
39
1.5.2編群器(Compiler)"甫充】
?前置慮理程式(Pre-Processor)
-編群的謾程中,加非一始就做^除程式礁的醇換,而是必須先幺
某些前置慮理,前置慮理的工作包含了去除注解、載入襟豆^t、展^
巨集等等。負(fù)責(zé)前置慮理工作的就耦之懸前置慮理程式,它通常已^
包含在褊群器之中(一般常見的言褊群器已^包含前置慮理程
式)OI——1~
廠主解].刪除注解
.L______
I/*功能:巨集取代函式*/「A
#defineSum(a.b)a+t>L
voidmain(void)前置慮理voidmain(void)
{
inta=5,b=10,c;
cHSum(a,b)l;
i>
IBI1-15前置慮理及巨集展^
40
1.5.3整合^^璟境(IDE)
?傅統(tǒng)的褊群程式UH變流程有些繁未復(fù),程式考殳言十白幣必須先用文善編$1器撰嘉
原始程式槽,然彳爰再交由編群器、速結(jié)器揩原始程式槽編群懸具有除金昔功
能的可軌行槽,最彳爰幺空謾除金昔瓢^彳爰,才重新編群速結(jié)懸最余冬的可軌行槽。
不謾造彳固流程通常不畬一次就完成,因懸程式可能彝生者吾法、者吾意等金昔Bg,
而必須在褊tt器、編群器、除金昔器^切換來午多次,才能別得到最彼正硅的
原始程式典軌行槽。
?整合|§穹酎裳境(IntegratedDevelopmentEnvironment;麓木再IDE)是一
套整合性軟骨乳它符褊$1器、編群器、速結(jié)器、除金昔器、亍程式等功能
整合在同一套敢:tt之內(nèi),以方便程式^言十肺變程式之用。
-目前大多數(shù)的視窗程式整合境除了提供上述功能之外,遢提供了^多
的視窗套件供程式as言十自幣使用(道些套件也都被整合在IDE之中)。例如:
Borland公司所推出的BuilderC++Builder就是一套包含者午多元件的視窗程式
整合^^璟境。
41
1.5.3整合璟境(IDE)
鼠C”D?IMB6?Fraytctl
fill.OtAhIFVbw&VAc?o90MgaXftobftmipvSf.IHcrw三]?
D0?g0g.ijAdctowlIWh3211Mta>?iDMACC?M!I4kfMWMJDMSTMIIBD<lit
jf>7)□z?116bQ國創(chuàng)山區(qū)0姐就j一至田
Hm)為
—...'
ECTim
「二?
Ac*a?|£i|
More
46MIS1
AttMtex^a29
BMdmHSLaMocq
AMoSodM
AO^?H
B4)ModrbdLHnR^h
i/加但(Cd
,r.
o
icSSn:EI
Al
?1-16Borland所推出的C++Builder提供了C++編群器的
完善功能及^公司所^^的各槿視窗元件
42
153整合^^Ig境(IDE)
■【褊群器典整合酎t境】
-由於整合^^it境已^包含了編群器的功能,因此我憑常常畬用整
合^^璟境的名穗作卷編群器的名科例如BorlandC++Builder是
一彳固整合^考酎曩境,但我件號也可以耦它懸一槿編群器,因卷它同棣
具有編群器的功能。但反之印蟀交懸不常,例如GCC只具有褊群器的
功能,而未招編11器等其他功能納入,因此,我憑只畬穗GCC懸一
槿編群器,而不畬耦GCC卷整合^^璟境。
-除了少數(shù)的古老褊群器(例如TurboC)之外,大部分的程式言殳言十白市
都使用C++編群器來編群(:言吾言程式,因荔C++本身已^包含了所
有的言程式^法。在本耆的附金家中,我仍介貂了非常多槿^的
C++褊群器,在本章中,我憑只曾罩示輪GCC褊群器、DevC++及
BorlandC++Builder6整合變?nèi)缮丫场?/p>
43
153整合^^Ig境(IDE)
?命令列式用程式典視窗鷹用程式
-IS用程式分懸雨大類乳分別是命令列式的鷹用程式(Console
Application)以及視窗用程式(WindowsApplication)。命令列式
的施用程式只能縫I在命令列璟境中來軌行,例如Unix/Linux的各罐
Shell以及Dos作渠系統(tǒng)或Dos工作視窗。而MicrosoftWindows印」
卷視窗程式的軌行璟境。
-it雨彳固不同槿^的鷹用程式必須透謾不同的褊群器來完成,
且變視窗程式遢必須透謾視窗作渠系統(tǒng)所提供的各槿API
(ApplicationProgrammingInterface;Jffi用程式介面)來完成某
些情成視窗的重要功能。^命令列式的言編群器有GCC、
TurboC>TurboC++、BorlandC++等等,而窗程式的編群
器有VisualC++、BorlandC++Builder等等。加且,能匏^視窗
作棠程式的編群器也可以^^命令列式的鷹用程式。本耆符只金十舉寸
H樊命令列式的用程式來加以^明。
44
1.6編群器典程式^^例
?在本fl中,我件跣各介貂如何使用GCC來編群(^吾言程式以
及透i!Dev-C++、BorlandC++Builder^it程式的^例,
其繪各槿褊群器及整合^^琪境的使用方法,言靛和者自行
參^附余錄的介貂。
45
1.6.1GCC編群器
?GCC是由FSF免費(fèi)軟醴憤畬所彝展的一套C輿C++的編群器。早期gcc只
能褊群(:言吾言,而g++即是用來編群C++言吾言(另外遢有g(shù)77是用來褊群
Fortra崎吾言),但彳爰來GNU符多槿言吾言的編群器統(tǒng)穗卷GCC(GNU
CompilerCollection),或且成懸Unix/Linux作渠系統(tǒng)中最常被使用的編
群器。GCC彳他1987年推出0.9/1.0版本彳爰,仍營不斷彝展中,目前最新的
版本卷3.x版,其中比較著名的版本刖懸2.7、2.95及3.0版。
GCC(GNUCompilerCollection)
ffll-17GCC編群器
46
1.6.1GCC編群器
1.6.1GCC編群器
?年6例1-1:在Unix/Linux中考變展C言吾言程式。
-Stepl:^WVim<^Wch1_01.Co
gis89807@cissolll:[-/ch01]$vimchl.Ol.c
-Step2:輸入右Bl程式內(nèi)容。
-Step3:高隹^Vim加存槽。
(按下[Esc]第
然彳爰由俞入【:wq】。)
48
1.6.1GCC編群器
-Step4:軌行編群及速余吉。
gis89807@cissolll:[~/ch01]$gccchl_01.c
-Step5:軌行a.ou懶行K。
gis89807@cissolll:[~/ch01]$./a.out
1*1=11*2=21*3=31*4二41*5=51*6=61*7二71*8=81*9二9
2*1=22*2=42*3=62*4=82*5=102*6=122*7二142*8=162*9二18
3*1=33*2=63*3二93*4二123*5二153*6=183*7二213*8=243*9二27
4*1=44*2=84*3=124*4二164*5二204*6=244*7二284*8=324*9二36
5*1=55*2=105*3二155*4二205*5二255*6:305*7二355*8=405*9二45
6*1=66*2二126*3二186*4二246*5二306*6:366*7二426*8=486*9二54
7*1=77*2=147*3二217*4二287*5二357*6=427*7=497*8=567*9=63
8*1二88*2=168*3二248*4=328*5=408*6=488*7:568*8:648*9:72
9*1二99*2二189*3二279*4二369*5=459*6=549*7=639*8=729*9=81
gis89807@cissolll:[~/ch01]$
49
1.6.1GCC編群器
-■主】:
gcc可以用來編群(3言吾言,但必2期務(wù)程式存槽卷小嘉r.cj副槽名,若
符程式存槽卷大嘉『.C』副槽名,即畬被gcc常作是C++程式來加以褊
W,SI然gcc也可以用來編群C++言吾言,但是郤必須另外修正其他^多
速余吉之虞。由於C++已^包含言的所有^法,因此,我憑也可以
直接使用g++來褊群C程式,但此日寺喜青符槽名信者存懸C++程式,也就是
符程式副本富名指定卷『.cpp』盤青符Stepl的vimch1_01.c改檢zim
ch1_01.cpp>Step4的gccch1_01.c改卷g++ch1_01.cpp)。
-[i±l:
gcc輿g++可以揩編群輿速余吉分^完成,加且可以指定輸出槽案的槽名
(不一定必須是a.out)。道些^於gcc輿g++的其他^定都是透謾參數(shù)
言殳定來加以完成,器亶者可以^^附金耒人操作。
50
1.6.2Dev-C++整合^^璟境
?Dev-C++是一彳固免費(fèi)勒?圈FreeSoftware),您可以在下列區(qū)罔
址中下載適套軟骨乳本耆所使用的版本卷較穩(wěn)定的4.0版。
-/
?Dev-C++是一彳固C/C++言吾言的整合璟境,它使用GCC褊
群器,加且支援GTK+的圈形介面(GUI)以及OpenGUf板
(Template),同日寺也能匏]^穹磬I窗用程式(Windows
Application),不it在本善中,我相股各只介女召如何使用Dev-
C++^f芟C言吾言命令列式愿用程式(ConsoleApplication)。
51
1.6.2Dev-C++整合璟境
勒列1-2:在Windows中使用Dev-C++ft展C言吾言程式。
-Stepl:安裝Dev?C++彳麥,軌行【|^始/程式集(所有程式)/Dev
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工程施工合同補(bǔ)充協(xié)議模板
- 2024保險(xiǎn)合同解除的原因
- 2024年度某玩具公司向某國外買家出口玩具產(chǎn)品的合同
- 五方土地買賣合同
- 2024裝修裝飾合同范本
- 攝影設(shè)備購買合同樣本
- 產(chǎn)品眾籌合作意向書
- 2024花生買賣合同范文
- 2024【溫室大棚建造】溫室大棚建造合同范本2
- 2024展會布置合同
- GB∕T 25341.1-2019 鐵路旅客運(yùn)輸服務(wù)質(zhì)量 第1部分:總則
- 畢業(yè)設(shè)計(jì)(論文)-人形機(jī)器人設(shè)計(jì)
- 八年級語文 課外現(xiàn)代文閱讀專項(xiàng)訓(xùn)練(50篇含答案)
- 不同種類氨基酸和糖的美拉德反應(yīng)
- 《動物疾病防治》課程整體教學(xué)設(shè)計(jì)方案-禽病防治
- 美世國際職位評估法IEP四因素10維度法
- 大地構(gòu)造學(xué)(中國大地構(gòu)造概要)課件
- 薄膜制備技術(shù)(PVD)(濺射)解析課件
- 化工設(shè)計(jì)概論(第二版)完整版課件(全)
- 新藥藥效學(xué)研究方法和技術(shù)要求
- 資料員崗位培訓(xùn)ppt課件(PPT 36頁)
評論
0/150
提交評論