成人AV在线无码|婷婷五月激情色,|伊人加勒比二三四区|国产一区激情都市|亚洲AV无码电影|日av韩av无码|天堂在线亚洲Av|无码一区二区影院|成人无码毛片AV|超碰在线看中文字幕

一個(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ù)可執(zhí)行的目標(biāo)程序?qū)⑦@些指令打包,以二進(jìn)制磁盤文件的形式存儲。

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

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

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

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

運(yùn)行C語言程序的編輯(輸入程序代碼,交給電腦)。編譯(目標(biāo)程序文件。obj)。就是把一種高級語言變成計(jì)算機(jī)能識別的二進(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文件會完成宏替換等動(dòng)作,編譯會生成一個(gè)匯編文件(可以在gcc下添加參數(shù)-s生成),后綴為s。

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

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

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

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