卖逼视频免费看片|狼人就干网中文字慕|成人av影院导航|人妻少妇精品无码专区二区妖婧|亚洲丝袜视频玖玖|一区二区免费中文|日本高清无码一区|国产91无码小说|国产黄片子视频91sese日韩|免费高清无码成人网站入口

一個(gè)c程序是如何工作的(C語言程序怎么運(yùn)行?)

c程序的工作過程?1 .使用編輯器創(chuàng)建并保存一個(gè)名為hello.c的文本文件可以說hello程序的生命周期就是從這個(gè)時(shí)候開始的,這也是因?yàn)檫@種形式更容易讓人理解。但是,為了在計(jì)算機(jī)上運(yùn)行這個(gè)程序,每一

一個(gè)c程序是如何工作的(C語言程序怎么運(yùn)行?)

c程序的工作過程?

1 .使用編輯器創(chuàng)建并保存一個(gè)名為hello.c的文本文件可以說hello程序的生命周期就是從這個(gè)時(shí)候開始的,這也是因?yàn)檫@種形式更容易讓人理解。但是,為了在計(jì)算機(jī)上運(yùn)行這個(gè)程序,每一條C語句都必須被其他程序轉(zhuǎn)換成一系列低級(jí)的機(jī)器語言指令,然后計(jì)算機(jī)根據(jù)可執(zhí)行的目標(biāo)程序?qū)⑦@些指令打包,以二進(jìn)制磁盤文件的形式存儲(chǔ)。

2.預(yù)處理階段:cpp根據(jù)#開頭的命令修改原C程序,比如將# inclultstdio.hgt中的stdio.件寫入hello.c中得到另一個(gè)程序保存在hello.i中。

3.編譯階段:ccl將文本文件hello.i編譯成hello.s,其中包含匯編語言程序。

4.匯編階段:As將hello.s翻譯成機(jī)器語言指令,將這些文件打包成一種叫做可重定位對(duì)象程序的格式,并將結(jié)果保存在hello.o中,這時(shí)如果我們用文本編輯器打開,就會(huì)看到一堆。

5.鏈接階段:因?yàn)閔ello程序使用了pringtf函數(shù)。每個(gè)C編譯器都會(huì)提供標(biāo)準(zhǔn)庫中的函數(shù)。printf存在于printf.o中,這個(gè)文件必須合并到hC語言程序怎么運(yùn)行?

運(yùn)行C語言程序的編輯(輸入程序代碼,交給電腦)。編譯(目標(biāo)程序文件。obj)。就是把一種高級(jí)語言變成計(jì)算機(jī)能識(shí)別的二進(jìn)制語言。計(jì)算機(jī)只知道1和0,編譯器把熟悉的語言變成二進(jìn)制。

編譯器將源程序翻譯成目標(biāo)程序的工作過程分為五個(gè)階段:詞法分析;語法分析;語義檢查和中間代碼生成;代碼優(yōu)化;目標(biāo)代碼生成

一個(gè)C程序到完成運(yùn)行要經(jīng)過哪幾個(gè)步驟?

Ld是鏈接器,鏈接成功返回0。一個(gè)C程序從代碼到二進(jìn)制文件的運(yùn)行要經(jīng)過預(yù)處理、編譯、匯編、鏈接、加載和執(zhí)行。

預(yù)處理后,C文件會(huì)完成宏替換等動(dòng)作,編譯會(huì)生成一個(gè)匯編文件(可以在gcc下添加參數(shù)-s生成),后綴為s。

在匯編步驟中,匯編程序?qū)褏R編文件轉(zhuǎn)換成*。o(低于*。o(linux)或*。obj(msvc)文件,這是目標(biāo)文件。

鏈接器負(fù)責(zé)鏈接多個(gè)目標(biāo)文件和庫文件,得到二進(jìn)制可執(zhí)行文件,程序會(huì)被加載到內(nèi)存中,在后續(xù)的加載階段執(zhí)行。

許多目標(biāo)文件會(huì)引用其他目標(biāo)文件中的變量或函數(shù),這些變量或函數(shù)在*中稱為符號(hào)。o.

有一個(gè)符號(hào)表。鏈接器的每個(gè)目標(biāo)文件中的symtab。;參考文獻(xiàn)。如果鏈接器在目標(biāo)文件中找到需要引用到其他位置的符號(hào)(這里它被分成PC階段)對(duì)于參考和絕對(duì)位置參考),它將找到被引用的符號(hào),如果找到,則重新定位它。一般來說,我們使用的ide會(huì)將上述過程集成到一個(gè)簡(jiǎn)單的步驟中,我們經(jīng)??梢?看不到其中生成的程序集文件和目標(biāo)文件。如果我們不這樣做。;如果不理解這些過程,我們可能會(huì)對(duì)ide 的錯(cuò)誤報(bào)告。