1.hello程序的生命周期是從一個高級c語言程序開始的,然后為了在系統上運行hello.c程序,每條c語句都必須被其他程序轉化為一系列的低級機器語言指令。
2.預處理階段。預處理器(cpp)根據以字符#開頭的命令,修改原始的C程序。#include <stdio.h>命令告訴預處理器讀取系統頭文件stdio.h的內容,並將它直接插入到程序文本中。結果就得到另一個C程序,通常以.i作為文件擴展名。
3.編譯階段。編譯器(ccl)將文本文件hello.i翻譯成文本文件hello.s。它包含一個匯編語言程序。匯編語言程序中的每條語句都以一種標准的文本格式確切地描述了一條低級機器語言指令。匯編語言為不同編譯器提供了通用的輸出語言。
4.匯編階段。匯編器(as)將hello.s
翻譯成機器語言指令。並將結果保存在目標文件hello.o中。hello.o是一種二進制文件。它的字節編碼是機器語言指令而不是字符。
5.連接階段。hello程序調用printf函數。它是c編譯器都會提供的標准c庫中的一個函數。printf函數存在於一個名為printf.o的單獨的預編譯好的目標文件中,而這個文件必須以某種方式合並到我們的hello.o程序中。連接器就是負責這種合並的。