天天看點

編譯是檢查C語言什麼的錯誤,c語言編譯過程

本文概述

什麼是彙編?

編譯是将源代碼轉換為目标代碼的過程。這是在編譯器的幫助下完成的。編譯器檢查源代碼中的文法或結構錯誤,如果源代碼無錯誤,則編譯器将生成目标代碼。

編譯是檢查C語言什麼的錯誤,c語言編譯過程

c編譯過程将作為輸入的源代碼轉換為目标代碼或機器代碼。編譯過程可以分為四個步驟,即預處理,編譯,組裝和連結。

預處理器将源代碼作為輸入,并從源代碼中删除所有注釋。預處理器采用預處理器指令并對其進行解釋。例如,如果,該指令在程式中可用,則預處理器将解釋該指令,并将該指令替換為“ stdio.h”檔案的内容。

以下是我們的程式在轉換為可執行形式之前所經過的階段:

預處理器

編譯器

組裝工

連結

編譯是檢查C語言什麼的錯誤,c語言編譯過程

預處理器

源代碼是在文本編輯器中編寫的代碼,并且源檔案的擴充名為“ .c”。該源代碼首先傳遞給預處理器,然後預處理器擴充該代碼。擴充代碼後,将擴充的代碼傳遞給編譯器。

編譯器

由預處理器擴充的代碼将傳遞給編譯器。編譯器将此代碼轉換為彙編代碼。或者我們可以說C編譯器将預處理的代碼轉換為彙編代碼。

組裝工

使用彙編器将彙編代碼轉換為目标代碼。彙程式設計式生成的目标檔案的名稱與源檔案的名稱相同。在DOS中,目标檔案的擴充名為“ .obj”,在UNIX中,擴充名為“ o”。如果源檔案的名稱是“ hello.c”,那麼目标檔案的名稱将是“ hello.obj”。

連結

主要,所有用C編寫的程式都使用庫函數。這些庫函數是預編譯的,并且這些庫檔案的目标代碼以’.lib’(或’.a’)擴充名存儲。連結器的主要工作是将庫檔案的目标代碼與程式的目标代碼結合在一起。有時,當我們的程式引用其他檔案中定義的功能時,就會出現這種情況;那麼連結器在其中起着非常重要的作用。它将這些檔案的目标代碼連結到我們的程式。是以,我們得出結論,連結器的工作是将程式的目标代碼與庫檔案和其他檔案的目标代碼連結起來。連結器的輸出是可執行檔案。可執行檔案的名稱與源檔案的名稱相同,隻是擴充名不同。在DOS中,可執行檔案的擴充名為“ .exe”,而在UNIX中,可執行檔案的命名為“ a.out”。例如,如果我們在程式中使用printf()函數,則連結器會将其關聯的代碼添加到輸出檔案中。

讓我們通過一個例子來了解。

你好ç

#include

int main()

{

printf("Hello srcmini");

return 0;

}

現在,我們将建立上述程式的流程圖:

編譯是檢查C語言什麼的錯誤,c語言編譯過程

在上面的流程圖中,采取以下步驟來執行程式:

首先,将輸入檔案即hello.c傳遞給預處理器,然後預處理器将源代碼轉換為擴充的源代碼。擴充源代碼的擴充名為hello.i。

擴充的源代碼将傳遞給編譯器,然後編譯器将此擴充的源代碼轉換為彙編代碼。彙編代碼的擴充名是hello.s。

然後将此彙編代碼發送到彙編器,由彙編器将彙編代碼轉換為目标代碼。

建立目标代碼後,連結器将建立可執行檔案。然後,加載程式将加載可執行檔案以供執行。