# 簡介

&#x20;        由各種支援電腦運作的程式所組成, 使用者因此可以 專注於應用程式。  使得使用者開發應用程式（Application）與解決問 題，而不需要知道機器的低階運作方式。 如 Compiler、 Loader、 Linker、Debugger、Assembler、Macro processor、Operating System等等。

&#x20;​        藉由與電腦的作業系統的互動操控這些流程&#x20;

&#x20;              UNIX (Linux)、DOS: 指令式 &#x20;

&#x20;              MacOS、Windows: 視窗式&#x20;

&#x20;       作業系統會幫你處理好機器層面的細節，你都不必擔心這些問題。

程式編譯過程：

1. &#x20;Preprocess先處理#ifdef #define這些東西並做一些巨集代換。
2. Compile做語意分析，翻譯成組合語言。
3. &#x20;Assemble翻成機器碼與OS有關的格式，做成relocatable obj檔 。
4. &#x20;Link找到symbol(函式，變數名 )與程式庫(shared obj)中的副程式 ，做成可執行obj檔(executable obj)。

![](https://4042840435-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LFy7p4pmeQc036DmOzV%2F-LFyZ6XQUQGn0_u4Bhcc%2F-LFy_IYrUfTyKS9PxIS8%2F1530058301394.jpg?alt=media\&token=69747d60-e036-4405-b76e-5a8d7d500785)
