編譯是從源代碼(通常為高級(jí)語(yǔ)言)到能直接被計(jì)算機(jī)或虛擬機(jī)執(zhí)行的目標(biāo)代碼(通常為低級(jí)語(yǔ)言或機(jī)器語(yǔ)言)的翻譯過(guò)程。然而,也存在從低級(jí)語(yǔ)言到高級(jí)語(yǔ)言的編譯器,這類編譯器中用來(lái)從由高級(jí)語(yǔ)言生成的低級(jí)語(yǔ)言代碼重新生成高級(jí)語(yǔ)言代碼的又被叫做反編譯器。也有從一種高級(jí)語(yǔ)言生成另一種高級(jí)語(yǔ)言的編譯器,或者生成一種需要進(jìn)一步處理的的中間代碼的編譯器(又叫級(jí)聯(lián))。一個(gè)現(xiàn)代編譯器的主要工作流程為:源代碼 (source code) → 預(yù)處理器 (preprocessor) → 編譯器 (compiler) → 目標(biāo)代碼 (object code) → 鏈接器 (Linker) → 可執(zhí)行程序 (executables)。
典型的編譯器輸出是由包含入口點(diǎn)的名字和地址, 以及外部調(diào)用(到不在這個(gè)目標(biāo)文件中的函數(shù)調(diào)用)的機(jī)器代碼所組成的目標(biāo)文件。一組目標(biāo)文件,不必是同一編譯器產(chǎn)生,但使用的編譯器必需采用同樣的輸出格式,可以鏈接在一起并生成可以由用戶直接執(zhí)行的EXE,
所以我們電腦上的文件都是經(jīng)過(guò)編譯后的文件。