1.預處理階段:
編譯器以c檔案作為乙個單元,首先讀這個c檔案,發現第一句與第二句是包含乙個標頭檔案,就會在所有搜尋路徑中尋找這兩個檔案,找到之後,就會將相應標頭檔案中再去處理巨集,變數,函式宣告,巢狀的標頭檔案包含等,檢測依賴關係,進行巨集替換,看是否有重複定義與宣告的情況發生,最後將那些檔案中所有的東東全部掃瞄進這個當前的c檔案中,形成乙個中間「c檔案」
編譯:
編譯時是進行語法檢查、函式分配空間,將各個函式編譯成二進位製碼,按照特定目標檔案格式生成目標檔案
連線:
假如乙個程式包含多個檔案,在分別對每個源程式進行編譯並得到多個目標程式後,要把這些目標程式連線起來,同時還要同系統提供的資源(如函式庫)連線成為乙個整體,如果不出現錯誤,會得到乙個字尾為 .exe的可執行檔案
執行:
執行是執行連線好的程式(具體的沒有找到相關資料) 將各個目標檔案中的各段**進行絕對位址定位,生成跟特定平台相關的可執行檔案,當然,最後還可以用objcopy生成純二進位製碼,也就是去掉了檔案格式資訊
一般說來編譯器會做以下幾個過程:
1.預處理階段
2.詞法與語法分析階段
3.編譯階段,首先編譯成純彙編語句,再將之彙編成跟cpu相關的二進位製碼,生成各個目標檔案
4.連線階段。
預處理 編譯 彙編 鏈結 執行
步驟 所進行的內容 生成的檔案 預處理展開標頭檔案 巨集替換 去掉注釋 條件編譯 test.i main i 編譯檢查語法,生成彙編 test.s main s 彙編彙編 轉換機器碼 目標檔案 test.o main.o 鏈結鏈結到一起生成可執行程式 可執行檔案 a.out 巨集優點 缺點 靜態鏈結...
c進行預處理 編譯 連線 執行是做什麼
預處理階段 編譯器以c檔案作為乙個單元,首先讀這個c檔案,發現第一句與第二句是包含乙個標頭檔案,就會在所有搜尋路徑中尋找這兩個檔案,找到之後,就會將相應標頭檔案中再去處理巨集,變數,函式宣告,巢狀的標頭檔案包含等,檢測依賴關係,進行巨集替換,看是否有重複定義與宣告的情況發生,最後將那些檔案中所有的東...
編譯鏈結執行原理 編譯鏈結執行過程
乙個.c cpp源程式檔案要最後變成.exe windows 或者.out linux 可執行檔案,要經過編譯和鏈結過程。四個步驟 預編譯,編譯,彙編,連線 一 預編譯 處理以 開頭的預編譯指令,比如 include,define等,規則如下 1 刪除所有的 define,並展開所有的巨集替換 文字...