1. 程式人生 > >程式的生成過程,預處理,編譯,彙編,連結

程式的生成過程,預處理,編譯,彙編,連結

當我們使用VS或者其他編譯器對我們所寫的程式進行執行時,在下面會出現,編譯、連結等等顯示,那麼到底什麼是編譯,連結?我們所寫的程式碼到底是怎樣變成可執行程式的?接下來就為大家解釋,程式是如何產生的。
示例一個大家都見過的程式列印:hello world!(檔名稱hello.c)
程式的執行過程請看下圖:這裡寫圖片描述

  • 預處理階段
    前處理器cpp根據以#字元開頭的命令,修改原始的C程式,例如hello.c中第一行,#include < stdio.h > 的命令告訴前處理器讀取系統標頭檔案,stdio.h的內容,並將其直接插入文字中去,於是得到了另一個c程式,通常以.i作為副檔名。
  • 編譯階段
    編譯器將文字檔案hello.i翻譯成文字檔案hello.s,包含一個組合語言程式。該程式包含main函式的定義。組合語言非常有用,它為不同高階語言的編譯器提供了通用的輸出語言。
  • 彙編階段
    接下來彙編器將hello.s翻譯成機器語言指令,把這些指令打包成可重定位目標程式
    並將結果儲存在hello.o。hello.o是一個二進位制檔案,開啟檔案我們將看到一堆亂碼。
  • 連結階段
    因為hello.c中呼叫了printf函式,他是每個c編譯器中都提供的一個函式。printf函式存在一個名為printf.o的檔案中,而我們必須把printf.o合併到hello.o中,所以連結器就負責這種工作。

    最後我們就得到一個名為hello.exe的可執行檔案,它可以被載入到記憶體中,由系統執行。