巫山網(wǎng)站開發(fā)太原seo哪家好
文章目錄
- 前言
- 一、翻譯環(huán)境
- 1、概念
- 2、翻譯環(huán)境的組成
- 3、什么是編譯鏈接?
- 二、編譯
- 1、編譯的階段
- 2、預(yù)編譯
- 3、編譯
- 1、什么是語法分析?
- 2、什么是詞法分析?
- 3、什么是語義分析?
- 4、什么是符號(hào)匯總?
- 4、匯編
- 1、符號(hào)表展示
- 三、鏈接
- 1、什么是段表?
- 2、段表的合并
- 3、符號(hào)表的合并和重定位
- 總結(jié)
前言
在ANSI C的任何一種實(shí)現(xiàn)中,存在兩個(gè)不同的環(huán)境。
第1種是翻譯環(huán)境,在這個(gè)環(huán)境中源代碼被轉(zhuǎn)換為可執(zhí)行的機(jī)器指令。
第2種是執(zhí)行環(huán)境,它用于實(shí)際執(zhí)行代碼。
接下來我們就來講解 翻譯環(huán)境
一、翻譯環(huán)境
1、概念
計(jì)算機(jī)可以識(shí)別二進(jìn)制指令,而我們寫的代碼時(shí)文本信息,計(jì)算機(jī)無法識(shí)別,需要翻譯環(huán)境進(jìn)行翻譯后,計(jì)算機(jī)才能識(shí)別運(yùn)行。
2、翻譯環(huán)境的組成
翻譯環(huán)境由編譯和鏈接兩部分組成
3、什么是編譯鏈接?
如下圖所示:
二、編譯
1、編譯的階段
編譯分為:
1、預(yù)編譯(預(yù)處理)
2、編譯
3、匯編
一共三階段
2、預(yù)編譯
VS身為集成開發(fā)環(huán)境,集成了編譯器(cl.exe),鏈接器(link.exe)和調(diào)試器
所以VS不好演示這一過程,這里我們可以使用Linux上的gcc編譯器演示
預(yù)編譯處理的:
1、頭文件的展開
2、注釋刪除
3、宏替換
這些都是文本操作,所有的預(yù)處理指令都是在預(yù)處理階段完成的。
3、編譯
編譯處理的:
1、把c語言代碼翻譯成了匯編語言
2、語法分析
3、詞法分析
4、語義分析
5、符號(hào)匯總
1、什么是語法分析?
語法分析(syntax analysis)是編譯程序的核心部分,其任務(wù)是檢查詞法分析器輸出的單詞序列是否是源語言中的句子,亦即是否符合源語言的語法規(guī)則。
2、什么是詞法分析?
詞法分析(英語:lexical analysis)是計(jì)算機(jī)科學(xué)中將字符序列轉(zhuǎn)換為單詞(Token)序列的過程。進(jìn)行詞法分析的程序或者函數(shù)叫作詞法分析器(Lexical analyzer,簡(jiǎn)稱Lexer),也叫掃描器(Scanner)。詞法分析器一般以函數(shù)的形式存在,供語法分析器調(diào)用。
3、什么是語義分析?
語義分析是編譯過程的一個(gè)邏輯階段, 語義分析的任務(wù)是對(duì)結(jié)構(gòu)上正確的源程序進(jìn)行上下文有關(guān)性質(zhì)的審查,進(jìn)行類型審查。語義分析是審查源程序有無語義錯(cuò)誤,為代碼生成階段收集類型信息。比如語義分析的一個(gè)工作是進(jìn)行類型審查,審查每個(gè)算符是否具有語言規(guī)范允許的運(yùn)算對(duì)象,當(dāng)不符合語言規(guī)范時(shí),編譯程序應(yīng)報(bào)告錯(cuò)誤。如有的編譯程序要對(duì)實(shí)數(shù)用作數(shù)組下標(biāo)的情況報(bào)告錯(cuò)誤。又比如某些程序規(guī)定運(yùn)算對(duì)象可被強(qiáng)制,那么當(dāng)二目運(yùn)算施于一整型和一實(shí)型對(duì)象時(shí),編譯程序應(yīng)將整型轉(zhuǎn)換為實(shí)型而不能認(rèn)為是源程序的錯(cuò)誤。
4、什么是符號(hào)匯總?
符號(hào)匯總:匯總?cè)肿兞?br />
4、匯編
匯編所處理的:
1、把匯編代碼形成二進(jìn)制指令
2、形成符號(hào)表
1、符號(hào)表展示
三、鏈接
鏈接處理的:
1、合并段表
2、符號(hào)表的合并和重定位
1、什么是段表?
在分段式存儲(chǔ)管理系統(tǒng)中,每個(gè)進(jìn)程或程序都有一個(gè)或多個(gè)邏輯段,為使程序或稱進(jìn)程能正常運(yùn)行,亦即,能從物理內(nèi)存中找出每個(gè)邏輯段所對(duì)應(yīng)的位置,在系統(tǒng)中為每個(gè)進(jìn)程建立一張段映射表,簡(jiǎn)稱段表,段表記錄了進(jìn)程中每一個(gè)段在內(nèi)存中的起始地址(又稱為 “基址” )、段號(hào)和段的長(zhǎng)度。
2、段表的合并
3、符號(hào)表的合并和重定位
重定位:將無效的地址去掉
extern中的Add只是聲明,沒有明確的空間,為無效值。