半瓶醋的 C++ 教學(第六章):開源流萬世一系不敗經典 Hello World 實作
基本上到目前為止好像都在閒聊(汗),還是讓我們進入實際操作吧,在這邊我們寫一支編程界的經典 Hello World 出來。
Hello World 本質上是一支連玩具都稱不上的程式,但透過寫作,她可以讓我們了解編程的最基本流程,並確認環境設定無誤。我記得自己剛開始編程的時候對環境的設定反而比較苦手,不知道什麼部分該用什麼,不然就是知道該用什麼卻必須一直辜狗;相較之下,語法的部分一開始超簡單,看看書沒兩下就懂了,所以在這邊,如同第零章所述,我想補的是一般書籍的不足,語法部分就請大家在第一章的推薦書籍之中自修一下。
首先在第四章我們提過了編程環境的選擇,當中我推薦用開源環境來編程,所以在這邊我介紹的是開源流的編程方式,M$ 流的也不難,基本上就是想辦法搞到一片 VC(到底有多少人用正版的?科科),打上 Hello World 再按某個鈕就好了,非常簡單,兩者的差異大致上就像自排車手排車一樣。自排車好開,但要充份享受駕馭極速機器的快感唯有手排,沒有人開藍寶基尼在開自排的吧?
OK,咱們開始吧。
首先你必需要準備的是作業系統。我個人建議想辦法弄台機器灌 *nix,純灌或是雙重開機都可以。*nix 的系統要求並不高,你家如果有舊機器應該就很可以勝任。distro 的話,初學者推 Ubuntu,每半年會升級一次,本文寫就時的版本是 8.04(即 2008 Apr. 發行,8.10 也快出了),可在這裡下載,而這裡有份 step by step 的 installation guide,裝起來非常簡單,下一步下一步就好,甚至比 Windows 還簡單,因為不必準備認證碼 :p。如果不打算自己灌也可用 ssh 連工作站,或是在 Windows 上灌 cygwin 或是 VMware 等等,方法很多。
灌完之後我們分三個階段來介紹:編輯、編譯、執行。
首先是編輯,我們需要 text editor。*nix 系統中應該內建有 gedit 等等的麻瓜 editor,但如果真有心要學編程的話,建議還是用真正巫師在用的 editor 如 vim 或 emacs。我自己是較慣用 vim 的圖形化版本 gvim,因此這邊用 gvim 來介紹。
Ubuntu 為 Debian 系 distro,安裝軟體非常簡便,一行指令就可以完成,package 間的 dependencies 會自動幫你 handle(當然其他 distro 應該也很簡單,最起碼會比 M$ 系簡單很多,連下一步下一步都不必)。以 gvim 為例,下這行指令就可以幫你裝好:
Ubuntu 的套件安裝、管理是用 apt 在做的,有興趣可以看這份 tutorial。其他也有圖形介面,或是 aptitude 可用。圖形介面較麻瓜,aptitude 較適合上級者,apt 則介於兩者之間。
接著我們就可以來「寫程式」了。下這行指令作編輯:
gvim 的視窗會被開起來。巫師的 editor 把移動跟編輯分開了,所以一開始用起來可能沒那麼直覺。這份中文 tutorial 很不錯,可以邊看邊玩玩看,現在 vi 的操作並不是我們的重點,之後我可能會寫但這邊先略過,我們輸入下面幾行:
int main()
{
printf( “Hello World!\n“ ) ;
return 0 ;
}
如同之前所說的,各符碼所代表的意義就請自己查書。 XD 簡而言之我們是在 printf 那一行 print 出了一個訊息。其餘主要是 C++ 這個語言所要求的一些形式。
接著是編譯的部分。C++ 在 *nix 上的編譯是用 g++ 這個 compiler 來完成。這裡有一份 tutorial 對他作了簡介。要編譯剛剛寫好的程式,我們下這行指令:
這樣就會以 HelloWorld.cpp 為 source file 編譯出 HelloWorld 這個可執行檔。g++ 可下各種參數作出不同取向的編譯,比方說 -O2 是對程式效能作最佳化,-g 是把 debugging info 編進去,-Wall 是輸出最多的 warning 訊息等等(這很重要,bug 常常出現在這裡,如果將來有一天你 debug 卡住可以試著用看看這個參數)。更完整的 g++ manual 可以在這裡找。
另外,每次編譯都要打這麼多字好像很煩,所以我們可以用 Makefile 來自動化編譯流程,這裡有一份 tutorial,有空我也會寫寫自己對 Makefile 的心得。
最後就是執行了。許多系統內建的執行檔通常直接下就可以了,不必給路徑,比方說 ls 就直接 ls 不必 /bin/ls。那是因為我們有把 /bin 加入 PATH 這個環境變數的原因。但通常我們存放自己寫的 program 的 path 並沒有 include 在 PATH 當中,所以必須給路徑。一般來說相對路徑即可,所以我們下:
應該會得到
這樣的 output,那就大功告成了!這便是萬世一系的不敗經典 Hello World 是也!
其他還有 gdb 可作一般性質 debug,valgrind 可作 memory debug,gprof 可作程式效能分析,subversion 可作源碼版本控制…等等。暫且打住,改天再提吧。 ![]()
Tags: APT, C++, G++, Linux, Makefile, ProgrammingArt, Ubuntu, Vim


