10.1 C、C++、Visual C++ 編譯器 1. C、C++、Visual C++ 的起源 10.2 lcc-Win32 compiler 1. 下載和安裝
本章學習指引: 第11章 說的 C 語言需要 C 或 C++ 的 compiler 來練習, 你可使用任何一個 C 或 C/C++ compiler, 因你只是初步學習 C 語言, 若沒商業性的 compiler, 當然不值得為此而花數千元來購買, 你可使用一個名為 lcc-Win32 的免費 C compiler 來作練習, 這軟件在校園中十分流行, 請看10.2 一節中的介紹。 在商業軟件中, 目前較多見的是 Microsoft Visual C++, 另一個也較多見的是 Borland C++, 這兩個軟件操作都很方便, 這一章會介紹這兩個軟件的基礎操作。另一個歷史悠久的 DOS 版本的 compiler 是 Turbo C, 因這程式在市面已少見, 所以本書不包括這程式。(留意: 本書說的是以 C 語言造出 DOS 程式, 所以就算你用最先進的 Microsoft Visual C++ V6, 也只是用來產生 DOS 程式, 所以請你盡量使用較簡單的 lcc-Win32、Borland C++ 或 Turbo C。) 每一個 compiler 都會提供一些預設 function 給使用者, 這些 function 是軟件商自己編寫的, 在微細地方可能每個 compiler 不同, 例如 printf() 是顯示某個記憶體範圍的資料, Borland C++ 在中途遇到 EOF 的字符就會停止, 因此不顯示隨後範圍內的空位, 而 Microsoft C++ 則整個範圍都會顯示 (因此會顯示下方空位), 同一的原始檔案, 用不同 compiler 產生出來的程式, 可能會有不同反應, 本書的例子是以 lcc-Win32 compiler 為依據。 這一章說到三個 compiler 的初步操作, 你可因應自己使用的編譯器而參看有關的資料, 但請你留意, 這不是三個 compiler 的使用手冊, 因為每一個 compiler 的完整說明最少需要一本厚書的篇幅, 這一章說的資料只僅足夠你應付第11章 的操作。
10.1 C、C++、Visual C++ 編譯器
1. C、C++、Visual C++ 的起源在第1章-P.3 介紹過 C 語言的特點, 這是 1972 年 Dennis Ritchie 在 AT&T 實驗室創造出來, 稱為 C 的原因是這語言很多地方是源自 B 語言 (1970 年 Ken Thompson 在 AT&T 創造), 而 B 又源自 BCPL 語言, 最終是源自 1960 的 Algo 語言。 C 語言出現後, 迅即成為個人電腦中主要的一般性程式語言, 在 1986 年, Bjarne Stroustrup 在 AT&T Bell 實驗室將 C 語言擴展成 C++, 這是物件導向語言 (object-oriented language), 比 C 複雜得多, 但自然功能更強, 適合發展視窗式的圖形顯示軟件。 C 與 C++ 都是指程式的語法, 在編寫時, 需要一個編譯器 (compiler), Visual C++ 是編譯器軟件的名稱, 這類編譯器的特點提供一個整合性的編寫環境, 例如 Microsoft Visual C++, 除了一般性的功能 (文字編輯器、檢錯功能等等), 還提供大量現成的物件和程式庫給程式員使用, 是為 MFC (Microsoft Foundation Class), 也可用 Wizard (精靈) 的方式造出指定的程式外殼, 例如功能列、工具列、狀態列等等, 都可以自動產生, 這就可大大減輕程式員的工作, 當然實際的程式反應內容, 就要程式員自行編寫了。
2. 這一章需要的 compiler在這一章的例子, 你可使用以下軟件進行編譯: 1. lcc-Win32 C compiler。 Turbo C 是最簡單的編譯器, 可在 MS-DOS 模式中執行, 這足夠應付這一章全部例子的程式, 就算你用 Microsoft Visual C++, 筆者也會使用這軟件內用來產生 DOS 程式的編譯器, 目的是避免因要產生視窗元件所需的複雜操作, 因為本書的目標是解說 C 語法, 不是編譯器的使用方式。
3. C 語言的編寫環境第1章 (P.2) 說過有關 compiled language 的特點, C 語言是一個 compiled langauge, 所以編寫 C 語言需要一個 compiler 軟件, 一個完整及功能完善的 compiler 當然要能將 source code 編譯成程式, 此外, 最少還要有 editor、linker、debugger、library 這幾項功能, 請看圖-1。 一些編譯器還有 optimizer 設備, 可將造出來的程式進行 optimization (最佳化), 目的是刪去冗餘的程序, 以增加程式碼的效率, 使程式更短更快。
圖-1 一個 compiler 的核心部份 a) Editor (編輯器)
b) Debugger (檢錯器) 在檢錯功能上, 每個 compiler 可能不同, 有些較為嚴緊, 例如你在程式宣告了一個變數, 但在整個程式內都沒有使用這變數, Microsoft Visual C++ 會提示用者, lcc-Win32 則不會, 有些編譯器容許用戶調校嚴緊的程度。
c) Library (Function library / 功能程式庫)
d) Compiler (編譯器) / linker (連結器) 在隨後的練習, 原始檔案中有 cprintf() 這個 function 名稱 (留意: 只是一個名稱, 不是實際程式), 在連結 (linking) 的時候, linker 會從 library 中取出 cprintf() 真正的程式片段, 放進 obj 檔案內, 最後變出 exe 的執行檔案。若程式編寫時分為多部份, linker 也負責將各部份連起來, 所以 linker 是一個合併中心, 請看下圖:
圖-2 Compiler 及 linker 的功用
e) Help (說明)
f) Compile-time error 及 run-time error 若一些嚴重錯誤在編譯時不能檢查出來, 編譯後得出來的程式就會有 bugs, 有時在編譯時不會有錯誤, 但使用時有錯誤 (請看第2章-練習-2 (P.4) 的 overflow 試驗), 就會停頓, 若在「視窗」操作系統執行這程式,「視窗」發現到錯誤就會停止該程式, 而且發出 run-time error (執行期錯誤) 的訊息, 你在「視窗」使用各類程式, 一定會遇過有些編寫得較差的程式常常有 run-time error。
10.2 lcc-Win32 compiler使用 lcc compiler 要留意事項: 1. 每一項工作使用一個新的 project 和一個獨立的資料夾, 例如這一節說的 project 是 study1, 使用的資料夾是 d:\studyC1, 若要造出第二個程式, 可使用 study2 為 project 名稱和使用 d:\studyC2 資料夾, 不要將 study2 放在前個資料夾內。 2. 盡量使用這編譯器為你預設的資料夾和名稱。 3. 留意: 在功能列的 [Edit] 內的 [Paste] 操作有誤, 第一次按 [Paste] 貼上數行文字, 畫面不會出現文字, 因為文字是移了去視窗上方 (你按 [↑] 將文字指標移上才會看到文字), 假若你不知文字已貼上, 再按 [Paste] 多一次, 今次才會出現文字, 實際已重複貼了兩次 (第一次文字是在視窗之頂), 所以編譯時會有錯誤, 也不能造出程式。
1. 下載和安裝lcc-Win32 是一個 C compiler, 除了完整的程式, 還有這軟件的使用手冊和線上的 C 語言說明功能, 另有一個獨立 C 語言教學指導。這軟件只供網路免費下載或互相傳送, 讓使用者作個人學習或教學之用, 但不能放在光碟中作為商業附送品 (這屬商業用途), 所以本光碟書不能收錄這軟件, 請讀者自行從 Internet 或其他途徑取得這軟件, 因為這軟件十分流行, 很多下載網站或學術機構都有提供下載途徑, 你可用 www.google.com 的搜尋功能來找一個有這軟件的本地網站, 或到以下有聯繫的網站尋找: www.q-software-solutions.com lcc-Win32 軟件有多個部份, 有些網站會將全部資料合為一個 zip 檔案, 體積是 18 MB, 常見的是 lcc.zip 或 lccWin32.zip 這些檔名, 但實際上你不需要全部份, 所以你可考慮下載以下各獨立部份。 lcc-Win32 compiler system (lccwin32.exe, 3.2M): 這會安裝 compiler 程式, 必需下載。 lcc-win32 users manual (manual.exe, 1.9M): 這會安裝 html 格式的使用手冊 (user‘s manual), 在圖-3 的 [Index] 會叫出瀏覽器來顯示手冊資料。(html 格式與 doc 格式的內容大致相同。) lcc-win32 users manual and technical documentation (lccdoc.exe, 2.1M): 這會安裝 c-tutorial.doc 和 manual.doc, 是 C 教學課程和 lcc-Win32 的使用手冊, 若你要進一步學習 C, 可參看 c-tutorial.doc, 不過是全英文, 而且說得頗技術性。 Windows API documentation (win32hlp.exe, 12.8M): 這是 API (Application Program Interface) 的使用說明, API 程式是用來控制「視窗」操作系統的語法, 初學者可以不理。
上述程式在執行安裝時, 要你指定一個資料夾用來安放產生出來的程式, 你可使用 C:\lcc 這資料夾名稱。
2. 使用 [Help]開啟程式後, 在功能列的 [Help] 可叫出以下選項, 實際還要看你安裝了哪一項說明。
圖-3 lcc-Win32 的說明選項
1. [Index]: 這會叫出瀏覽器來載入 html 格式的 compiler 使用手冊, 若沒有安裝這手冊, 會啟動下一項的 [Standard C library]。 2. [Standard C library ]: 這會開啟一般 Help 格式的說明, 內容是 C 語言的語法說明。 3. [Win32 API]: 這會開啟一般 Help 格式的說明, 內容是 API 的語法說明。 4. [Manual]/[Technical doc]/[Resources doc]/[C-Tutorial]: 若安裝 lccdoc.exe 就有這四項, 這會啟動 Word 來載入有關的檔案。
3. 開啟程式和設定操作目錄要使用 lcc-Win32 程式來工作, 請你在「開始功能表」中開啟編譯器, 或在 lcc 目錄內的 <bin> 資料夾開啟 wedit.exe 這程式, 就可開啟編譯器的編輯畫面, 有圖-6 的工作視窗。 在編寫原始檔案前, 你先要設定一個 project (專案) 名稱和一個資料夾來安放操作用的檔案, project 是指整個產生程式的工作, 這包括我們編寫的原始檔案和一些其他中途檔案, 將來造出來的程式會以這 project 為名。 請你在功能列的 [File] 下選 [New] , 再選 [Project], 有以下對話盒要你輸入 Project name, 請你輸入一個名稱, 例如 study1, 將來造出來的程式會是 study1.exe。
圖-4 在這對話盒放下 project 的名稱 按 [OK], 跟著有這對話盒:
圖-5 這對話盒是選擇存放目錄和產生哪一類程式 [Name of the project] 中的 "study1" 是圖-4 中放下的名稱, 在 [Working directory] 中請你放下一個名稱, 例如 d:\studyC1, 這是今次 project 用的資料夾, 請你用滑鼠在 [Output directory] 中按一下, 就會自動出現這名稱 d:\studyC1\lcc (請盡量不要更改這預設的名稱), 這是放置程式產品的地方, 盡量不要更改這名稱, 否則這編譯器可能找不到這資料夾。 在 [Type of project] 中預設是選了 [Console Application], 這是產生 DOS 程式, 不要更改, 請你按 [Create], 就會產生 d:\studyC1 和 d:\studyC1\lcc 這目錄結構, 跟著有以下對話盒:
若你選 [是], 就會造出一個空殼的原始檔案, 你可自行嘗試, 在今次練習, 請你按 [否], 跟著有目錄對話盒要你輸入今次原始檔案 (C source) 的名稱, 例如你給予這檔案 demo1.c 的名稱, 按 [開啟], 再會有對話盒要你確定, 請按 [Validate] (即是確定), 跟著會有一連串的對話盒要你設定各項操作, 請你接受全部預設值, 不需作任何更改, 一路按 [下一步] 和 [完成], 最後會得到以下工作畫面。
圖-6 lcc compiler 的原始檔案編輯畫面 得到上以畫面後, 就可在編輯器中輸入原始檔案的程式碼。 (假若你要開啟一個以前使用過的 project, 可在功能列的 [Project] 下選 [Open] 來開啟這 project, 然後在功能列的 [File] 下選 [New]/[File] 或 [Open], 就可開啟一個新的或已有的原始檔案, 這也會得到圖-6 的編輯畫面。在這功能列下也可刪去已有的 project。)
4. 在 Text editor 輸入程式句子第4章 說過 "Hello World" 這類示範程式, 是用來介紹一個程式語言或編譯器的初步操作, 這一節說如何用 lcc compiler 造出一個 "Hello Word" 程式, 隨後的練習不會重複建立程式的程序。 請在圖-6 的編輯畫面鍵入以下文字, \n \r 是在顯示文字後加多一個空行, 無實際操作用途。 /* This is a simple Hello World program (這是 comment) */ 你也可以將這程式的句子, 用剪貼的方式複製到編譯器的編輯畫面, (留意: 貼上的文字可能是在視窗之頂, 你要按 [↑] 將顯示範圍移上才看到文字), 視窗中應有以下結果:
圖-7 在編輯器中鍵入程式的句子 寫好程式或在編寫中途, 可選 [Save] 將資料存檔, 在編譯程式時, 若你未存檔, 會有對話盒要你先存檔。
5. Debug (檢錯)你可使用編譯器來檢查語法是否有錯誤, 請你在功能列的 [Compiler] 下選 [Execute study1.exe] 或 [Rebuild all], 編譯器會執行 Editor 中的程式, 在下方會有一個 Message window 顯示執行結果, 若無錯誤, Message window 會有以下顯示:
圖-8 Message window 的 built successfully 表示程式沒有問題 請你將今次程式中的顯示文字作以下更改, 留意這是漏了第一個 " 字符: cprintf( Hello, World ! \n \r") ; 請你在功能列的 [Compiler] 下選 [Rebuild all], 編譯器執行這程式時發現錯誤, 會有一列的錯誤訊息顯示, 最後一項是 Return code: 1, 表示錯誤, 請看下圖:
圖-9 Message window 的錯誤訊息顯示
6. 造出程式檔請你改正上段的錯誤, 然後進行造出程式的程序, 在功能列的 [compiler] 下有三個選擇: 1. [Compile] (編譯): 2. [Make]: 3. [Build all] (建立): 請你在 [Compiler] 下選 [Rebuild all], 在 d:\studyC1\lcc 目錄中就會出現 study1.exe 程式檔案。
7. 試用今次造出來的 study1.exe 是 DOS 程式, 請你開啟「MS-DOS 模式」, 可能會有這提示號: C:\Windows>, 請依以下程序去到 D:\studyC1\lcc 目錄 (DOS 指令不分大小寫)。 C:\Windows> cd .. (鍵入 cd .. 會退上一層目錄, 提示號變為 C:\>。) 請你在 D:\studyC1\lcc> 後鍵入 study1, study1.exe 就會執行, 若畫面出現 Hello, World ! 這句, 表示你已成功用 C 語言造出一個程式。 |
|