C 翻譯與執行

2021-08-25 19:34:58 字數 1452 閱讀 1997

在ansi c 的任何一種實現中,存在兩種不同的環境。分別為: 翻譯環境(translation environment)和 執行環境(execution environment)。

在翻譯環境中,源**被轉換為可執行的機器指令;執行環境,用於實際執行**。

翻譯階段由幾個步驟組成,組成乙個程式的每個原始檔通過編譯過程分別轉換為目標**(object code)。然後,各個目標檔案由鏈結器(linker)**在一起,形成乙個單一而完整的可執行程式。鏈結器同時也會引入標準c函式庫中任何被該程式所用到的函式,而且它也可以搜尋程式設計師個人的程式庫,將其中需要使用的函式也鏈結到程式中。

如下圖描述了這個過程:

編譯過程本身也分為幾個階段,首先是預處理器(preprocessor)處理。在這個階段,預處理器在源**上執行一些文字操作。例如,用實際值代替由 #define 指令定義的符號以及讀入由 #include 指令包含的檔案的內容。

然後,源**經過解析(parse),判斷它的語句的意思。第2個階段是產生絕大多數錯誤和警告資訊的地方。

隨後,便產生目標**。目標**是機器指令的初步形式,用於實現程式的語句。

如果我們在編譯程式的命令列中加入了要求進行優化的選項,優化器(optimizer)就會對目標**進一步進行處理,使它效率更高。

注意:檔名約定

c源**通常儲存於以 .c 副檔名命名的檔案中。

由#include 指令包含到c源**的檔案稱為標頭檔案,通常具有副檔名 .h。

至於目標檔名,不同的環境可能具有不同的約定。例如,在unix系統中,它們的副檔名是.o,但在ms-dos系統中,它們的擴充套件名為.obj。

程式的執行過程,也需要經歷幾個階段。

首先,程式必須載入記憶體中。在宿主環境中(也就是具有作業系統的環境),這個任務由作業系統完成。

在自由式環境中,程式常常永久儲存於rom中。

然後,程式的執行便開始。在宿主環境中,通常乙個小型的啟動程式與程式鏈結在一起。它負責處理一系列日常事務。

接著,便呼叫main函式,開始執行程式**。在絕大多數機器中,程式將使用乙個執行時堆疊(stack),它用於儲存函式的區域性變數和返回位址。程式同時也可以使用靜態(static)記憶體,儲存於靜態記憶體中變數在程式的整個執行過程中將一直保留它們的值。

程式執行的最後乙個階段就是程式的終止,它可以由多種不同的原因引起。「正常」終止就是mian函式返回。在宿主環境中,啟動程式將再次取得控制權,並可能執行各種不同的日常任務,如關閉那些程式可能使用過但並未顯式關閉的任何檔案。除此之外,也可能是由於在執行過程中出現錯誤而自行中斷。

轉錄與翻譯

gene structure transcription 1.dna上有轉錄啟動位點和終止位點,rna聚合酶結合到上面,得到rna primary transcript 2.rna被切掉內含子,加上5帽子和3尾巴,得到成熟mrna rna seq研究物件 3.mrna到核外,翻譯成蛋白。可變剪下 可...

c語言的翻譯叫什麼 c語言翻譯

把下面這個程式逐條翻譯,就是說每條都是幹什麼用的,並且完善一下。非常急,感謝各位高手了!約瑟夫環的程式設計 include include definenull0typedef.把下面這個程式逐條翻譯,就是說每條都是幹什麼用的,並且完善一下。非常急,感謝各位高手了!約瑟夫環的程式設計 include...

C 英文翻譯。

你工作在乙個新的 將不會編譯,你需要執行的程式。編譯器不會讓你執行如果有編譯錯誤。注釋掉的進展 允許程式編譯,所以你可以執行它。想象一下你正在學習另一種語言,如法語。當你學習法語,你顯然不是要記住一切後一看學習你 會有,你會忘記等意義,除非你去了很多次的話。現在想象一下,你只部分地通過學習法語,但你...