計算機硬件能“認識”的只有機器指令,它并不認識程序設計語言,如 C 語言。要使計算機能夠執行 C 語言寫的程序,必須把 C 語言的程序翻譯成計算機認識的機器語言,機器語言版的程序稱為目標程序。C 語言程序到目標程序的翻譯稱為編譯,由編譯器完成。在編譯過程中,編譯器會一一找出程序中不符合語言規范的地方,這些被稱為語法錯誤。如果程序沒有語法錯誤,編譯后將會生成目標代碼。
程序員編寫的程序通常會用到其他程序員或 C 語言系統已經編好的一些工具,程序運行時會用到這些工具的代碼,需要將這些工具的目標文件和程序的目標文件放在一起,這個過程稱為鏈接。鏈接器就是完成這個鏈接工作。鏈接以后的代碼稱為一個可執行文件。這是能直接在某臺計算機上運行的程序。
1.5.6 為什么在不同類型的計算機上運行C語言程序需要使用不同的編譯器
因為不同的生產廠商生產的計算機有不同的機器語言,所以需要不同的編譯器將同樣的 C 語言程序翻譯成不同的機器語言。就如同一份中文的文件,給美國人看時需要有人翻譯成英文,給法國人看時需要有人翻譯成法文。
1.5.7 為什么不同類型的計算機不能運行同一個匯編程序
不同類型的計算機能運行同一個 C 語言程序是因為不同類型的計算機上有不同的 C 語言編譯器。每個編譯器可以將同一個 C 語言程序編譯成自己機器上的機器語言表示的目標程序,所以不同類型的計算機可以執行同一個C語言程序。