上官林傑 (r93066 AT csie.ntu.edu.tw)
這份文件是為了台大資訊系93, 94 學年度「計算機程式設計」這門課程而設計 的編譯器使用指引。在文中提及「系上」之類的詞語皆是指台大資訊系,而工作站也是台大資訊系的資源。除此之外,其它的操作步驟還是可以 作為使用的參考。(如:使用 Microsoft® Visual C++® 軟體的部分)。
gcc 是 GNU project 中的 C 的編譯器(compiler)。在系上工作站(R217)上都有這個軟體,以下就為各位介紹如何在工作站上編輯程式碼以及使用 gcc 來編譯成可執行檔。
- 連接到工作站
如果要遠端登入到系上工作站,就必須透過 SSH 協定來連線,你可以使用任何 SSH Client 軟體來連接到工作站上,這裡推荐一套不錯的 pputty(作者:piaip@csie.ntu.edu.tw)。而如何使用這套軟體及工作站位址,請參考 pputty 網頁及 217 助教發給各位的帳號資料。
- 編輯程式碼
連上工作站後,就可以使用工作站下的文字編輯軟體來編寫程式碼了。這份文件將會教各位使用 joe 這個 文字編輯器來編輯程式碼(因為它很簡單:P)。要使用 joe ,直接在命令列下輸入 joe 就可以進入編輯畫面了(或是在 joe 後接一個檔名,屆時編輯完成後存檔便會直接存到該檔案中)。
Fig.1 啟動 joe 編輯器編輯 test.c 檔案。 如此一來,便會進入 joe 的編輯畫面:
Fig.2 joe編輯畫面 進入 joe 編輯畫面之後,你就可以開始撰寫程式碼了。如果你想要存檔或是其它操作,可以先按 Ctrl+k 再按 h 即會出現說明選單:
Fig.3 joe說明選單 由這個說明選單中,我們可以發現,如果我們要離開編輯環境及存檔的話,那麼我們必須先按 Ctrl+k 再按 x 來完成。如果只是要存檔而不離開的話,則是先按 Ctrl+k 再按 d 。(^代表Ctrl鍵)
- 編譯程式碼
打完程式碼,也存好檔了之後,就可以開始進行編譯的動作。在命令列中輸入 gcc <程式碼檔名> 便會開始進行編譯的動作。
Fig.4 使用gcc編譯程式 如果你的程式碼中並沒有語法上錯誤的話, gcc 就會很「安靜」地編譯完再回到命令列(此時就已經產生了可執行檔)。如果你程式碼中有錯誤的話, gcc 則會產生錯誤訊息,提示你哪裡可能寫錯了:
Fig.5 gcc的錯誤訊息 上圖這個例子,看得出來是將印出字串的函式 printf 拼錯成了 prinf 。gcc 在編譯這裡時發現錯誤,就會提示你 prinf 沒有被定義過,沒辦法繼續編譯完成,也就不會產生執行檔了。
- 執行程式
假設你在編譯的過程都沒有發生錯誤的話,照上述的步驟執行,gcc 就會在同一個目錄下產生一個名為 a.out 的執行檔,我們可以在命令列下輸入 ./a.out 來執行它:(如果不喜歡產生的執行檔叫 a.out 的話,那在使用 gcc 的時候,加入一個 -o 的選項,後面再接希望輸出的名稱即可。如: gcc test.c -o test ,這樣產生的執行檔就會名為 test 而不是 a.out 了。)
Fig.6 執行編譯好的程式 以上便是簡單地在工作站上寫程式的步驟,如果對文中的任何步驟有疑問或是想更進一步研究的話。可以寄 e-mail 與我討論,或是發揮好學的精神自動自發去找資料囉。
在 Windows 作業系統下使用 Microsoft® Visual C++® 6.0
Microsoft® Visual C++® 6.0(以下用 VC6 稱之)是 Microsoft 所發售的軟體,它是一套整合式的開發環境,因為它整合了像是文字編輯器、編譯器(compiler)、除錯工具(debugger)及建置工具等等,以提供程式的開發者一個完整的環境,輕鬆地開發程式。它與 gcc 不同,除了 gcc 是一個純粹的編譯器之外, VC6 並不是免費軟體,不過系上219電腦教室的電腦上都有安裝這套軟體,如果自己電腦上沒有這套軟體而又懶得「取得一套來安裝」的話,可以到電腦教室使用。
接下來便開始介紹 VC6 的使用步驟囉:
- 開啟一個 Project
執行了 VC6 之後,我們從 File -> New... 來開啟建立 project 的對話框:
Fig.7 開啟建立 project 對話框 打開對話框之後,就可以選擇我們要建立 project 的類型,如下圖所示:
Fig.8 建立 project 對話框 我們選擇 Projects -> Win32 Console Application 的專案類型,然後在右側填入 Project name ,然後在 Location 的地方就是指定相關檔案(project的檔案及程式碼檔案)存放的位置。這些設定好了之後按下 OK 就會進入到下一個對話選單。
Fig.9 選擇建立 Win32 Console Application 類型 在這裡,我們選擇 An empty project. 之後再按下 Finish 。這樣它就會幫我們產生一個新的 project ,並且產生相關檔案及設定。
- 撰寫程式碼
在建立好 project 之後,我們還必須建立一個程式碼的檔案,好讓我們開始撰寫程式碼。跟前面一樣,在 File -> New... 開啟對話選單。
Fig.10 建立檔案 在這裡我們選擇建立 File -> C++ Source File 類型的檔案,並且在右側指定檔案名稱為 test.c (當然檔名可以自由選擇,不過副檔名 .c 表示是 C 程式碼,而 .cpp 則表示為 C++ 的程式碼)。按下 OK 後我們就可以開始寫程式了。
Fig.11 撰寫程式碼 - 編譯程式及執行
程式碼打好之後,就要把它編譯成執行檔,在 VC6 這種整合式開發環境中動作就簡單多了,如下圖所示點選 Build 的圖示。(Build 是編譯後再產生執行檔,而左邊的 Compile 圖示是只有編譯程式碼而不產生執行檔)
Fig.12 Build 圖示 而如果你的程式碼有語法上的錯誤時,在 build 的時候,下方的視窗就會出現錯誤訊息,如下圖所示:
Fig.13 錯誤訊息 如果在 build 的過程中沒有任何錯誤的話(就是底下視窗顯示 0 errors),那就表示 build 成功,也就產生好了執行檔(預設是放在 {Project目錄}\Debug\***.exe),當然你也可以透過 VC6 裡的 Execute (一個驚嘆號的圖示)來執行程式。
Fig.14 執行程式 程式的執行結果就會如下圖所示:
Fig.15 執行程式的結果 畫面很正確地輸出了一行 "Hello, world!" 的字樣,並且提示你按任一鍵就會跳出這個視窗。以上便是使用 VC6 來開發小程式的簡單步驟(因為 VC6 的功能繁鎖且強大,這裡就不再贅述,有興趣的同學可以自行找資料學習)。
Dev-C++是 Windows 作業系統下一個免費的 C/C++ 整合型開發環境,而且也有做了不錯的國際化,如果使用者願意也可以將功能表選單等等介面改成中文化的介面。而且它使用的 compiler 也是 gcc 這個 project (由 Mingw 移植的 Windows 版本),所以也值得為各位作個介紹:
- 取得 Dev-C++ 及安裝
先到官方網站下載 Dev-C++。在這個範例會以最新版本的 Dev-C++ 來作示範(Dev-C++ 5.0 beta 9 (4.9.9.0) (7.6 MB) with Mingw/GCC 3.3.1)。下載完後直接執行它就可以進行安裝了。
- 設定 Dev-C++
執行 Dev-C++ 後,如果你是第一次執行,則它會一步步詢問你要怎麼設定整個環境,如果你以後還想更改像介面這類的設定,可以到 Tools -> Environment Options 裡作更改:
Fig.16 設定開發環境 然後在 Interface 的分頁中選擇你想要更改的語言,以及更改你喜歡的選項:
Fig.17 更改介面環境 - 建立專案及撰寫原始碼
設定完環境之後,就如同其它整合開發環境一下,我們得先建立一個專案來讓我們開發程式。從 檔案 -> 開新檔案... -> 專案 來建立
Fig.18 建立專案 然後目前我們只需要建立 Console Application 的專案就可以寫作業了,不過要注意右下角的類型要改成 C 專案才不會讓 compiler 把你的程式碼當 C++ 在看唷!
Fig.19 建立專案 建立好專案之後,Dev-C++ 就會幫我們產生一個 main.c 的原始碼檔案,裡面會幫我們加入一些程式碼,你可以依自己的需要增減(好比說要把 system("pause") 拿掉避免嚇到批改魔,而 main 的兩個參數目前不會影響寫作業)
- 編譯及執行
寫好程式碼之後,最重要的就是要編譯它並且執行看結果,這種事情在整合式開發環境中一切是那樣地容易,只要利用工具列的快速按紐就可以搞定了。
Fig.20 編譯 在那一排圖示中有各式編譯或執行的選項,因為這部分與上述的 M$VC 的步驟類似,剩下的部分就交給各位自己去嘗試囉(反正介面都是中文的,不要再說看不懂了XD ),不過程式一執行完就會關掉視窗,所以如果想看結果,就自行加入 system("pause"); 之類的東西讓它暫停一下吧。
在 Windows 作業系統下使用 Mucrosoft® Visual Studio® .Net 2003
Microsoft® Visual Studio® .Net 2003(以下用 .Net 2003 稱之)是 Microsoft 所發售的軟體,它是一套整合式的開發環境,因為它整合了像是文字編輯器、編譯器(compiler)、除錯工具(debugger)及建置工具等等,以提供程式的開發者一個完整的環境,輕鬆地開發程式。它與 gcc 不同,除了 gcc 是一個純粹的編譯器之外, .Net 2003 並不是免費軟體,你可以到學校計中網頁下載,或是到計中購買光碟。
這裡會一步步介紹如何使用 .Net 2003 來撰寫一個純文字模式的 C/C++ application:
- 開啟專案
如同在 VC6 或是 DevC 下一樣,我們必須先開啟一個專案來管理即將要開發的 application,打開 .Net 2003 之後就在功能表列找 檔案 -> 新增 -> 專案 來開啟專案。
Fig. 21 在 .Net 2003 中開啟專案 - 選擇專案類型
因為 .Net 2003 是一個大型的整合式開發環境,支援的專案類型繁多,如果我們只是要寫像計程作業這樣的程式,就要選擇 Visual C++ 專案 , 然後範本選擇 Win32 主控台專案 (英文版是 Win32 Console Application)。而你也要輸入專案名稱,然後選擇專案檔案(包括程式原始碼)在存放的地方。
Fig. 22 選擇專案類型 選好類型後,會再跳出一個對話視窗來設定專案類型,在這裡我們選擇主控台應用程式,然後在下面的空專案打勾(不使用它預設的範本)
Fig. 23 設定專案 - 加入原始碼
設定完畢後,如果你沒有改過預設的配置,你可以在主視窗的右側找到管理專案的部分,在原始程式檔處按下右鍵選擇加入 -> 加入新項目(如果你已經有程式檔的話,可以加入現有項目)。
Fig. 24 加入原始檔 接著,你必須選取你要加入項目的類型,在這裡我們選擇C++ 檔 (.cpp),然後要注意的是,檔案名稱的地方我們將它的副檔名取為 .c,用意在告訴編譯器用 C 的標準來編譯程式,而不是用 C++ 的標準。
Fig. 25 選擇原始檔類型 - 撰寫程式碼及編譯
如果一切無誤,那麼程式就會開啟一個文字編輯區域讓你撰寫程式碼,如下所示:
Fig. 26 撰寫程式碼 程式碼打完之後,存檔,然後就是作編譯的動作了。在功能表列找到建置 -> 建置方案,然後編譯器就會開始來作編譯的動作了。
Fig. 27 編譯程式 編譯時,下方會出現訊息區域,這裡會告訴你編譯的狀況,如果程式有寫錯,在編譯時也會在此顯示出錯誤訊息
Fig. 28 訊息視窗 - 執行程式
當編譯程式成功之後,可以選擇偵錯 -> 啟動但不偵錯來執行程式。(如果選擇啟動的話,會進入偵錯模式,如果你有使用 .Net 的 debugger 的話才需要使用偵錯模式)
Fig. 29 執行程式 然後就會跳出一個 console 視窗來顯示程式執行的結果。
Fig. 30 程式執行結果 你可以根據 console 視窗的標題來找到執行檔的位置(最後那一行"Press any key to continue" 是 .Net 2003 加入的部分,你不用擔心這行字會影響批改魔)。