Linux 下的“Hello world!”

 早就安裝了redhat的FC4,起初在linux下真是感覺寸步難行,半天也安裝不上一個軟件。平時在windows下進行嵌入式開發,對linux下 的一些概念略知一二,加上網絡上的豐富資源,沒過多久也知道個大概了。用了幾天,感覺在linux下,一切都變的麻煩了,而且軟件運行速度也比較慢。結 果,一時熱度過後,就很少進linux系統了。
    前幾天聽說FC6發佈了,又來了興趣。於是想新版是不是有提高,希望能夠延續自己的興趣。不管怎麼樣下了再說。花了一個晚上,終於下完了。這次輕車熟路, 安裝軟件都比較順利,但系統本身的安裝還是比較嗎。這過程中,一種明顯的體會就是,FC6的效率明顯提高了,默認字體漂亮了,中文輸入法智能拼音也比較好 用,還有Stardict等等,總之比FC4的感覺好多了。有了一個好的系統,當然就不容易失去興趣。開始學習在linux系統中寫些程序。

   1.編輯器
    要寫程序就需要一個好的編輯工具,要是再要有一個好的閱讀工具那就如虎添翼了。在windows下有SourceInsight,集編輯閱讀於一身的非常 好的一個編輯工具。Linux下不知道是否有這樣的工具,FC6自帶的gedit好像也不錯,也有高亮顯示語法。但來之波蘭的同事建議使用NEdit,他 以前在linux下做過開發。gedit更偏向於一般文本的編輯,而NEdit更適合編輯代碼,就用NEdit啦。至於閱讀代碼工具,一直沒有找到。 NEdit可以在它的網站:http://www.nedit.org/下載到。Linux下閱讀代碼可以用SourceNavigater和SlickEdit。試了一下,SourceNavigater建工程太慢,建一個內核源碼工程,竟然用了五個小時還讓人覺得遙遙無期;SlickEdit用的是11.0.2,快多了,但是很容易死機,容易造成系統無法動盪只能重啓。可能是我沒有設置好,也可能是因爲內核代碼太大了,還得仔細研究研究這兩工具。
    2.編譯器
    在linux下,當然是GCC。看看版本。
    # gcc --version
    gcc (GCC) 4.1.1 20061011 (Red Hat 4.1.1-30)
    Copyright (C) 2006 Free Software Foundation, Inc.
    本程序是自由軟件;請參看源代碼的版權聲明。本軟件沒有任何擔保;
    包括沒有適銷性和某一專用目的下的適用性擔保。
  
    3.運行
    編譯生成的文件在終端中可以直接運行:#./filename

準備好了,開始我們的“Hello World!”
    在用戶主文件夾下建一個文件夾Tests。在終端中輸入nedit打開編輯器,新建文件,並保存爲Tests文件夾下的test.c文件。這樣nedit就能夠高亮顯示C語言的語法關鍵詞。輸入一下代碼:
int main(int argc,char **argv)
{
    printf("Hello World!/n");
}
    在VC下我們寫完這樣的一個小函數,只要點擊編譯,VC就給我們編譯好了。這是因爲有一個工作VC幫我們做了,那就是寫makefile,VC知道我們需 要編譯哪些文件,並自動產生編譯用的makefile。在VC中我們也可以導出makefile,也就是.mak結尾的文件。而在linux下,就需要我 們自己編寫makefile,來告訴編譯器GCC編譯鏈接文件時的規則和依賴關係。因此我們要編譯生成執行文件,就要爲其編寫makefile文件。我先 前轉載的《一起寫makefile》有用了。
    我們在Tests目錄下,建立一個名爲makefile的文件。用gedit打開編輯.

test: test.o               //執行文件test依賴於文件test.o
    gcc -o test -g test.o  //-o 輸出執行文件名爲test,-g 支持源碼debug
test.o: test.c             //test.o依賴於test.c
    gcc -c -g test.c     
clean:                     //定義了一個命令clean,默認make從文件頭開始
    rm test test.o         //移除文件test,test.o

保存這樣的一個makefile文件,打開終端,cd到tests目錄。
#make
你將看到:
gcc -c -g test.c
gcc -o test -g test.o
先後順序變了,這就是依賴關係的體現;如果你不想看到這些信息也可以
#make -s
這樣你的目錄下就多了兩個文件,test和test.o
如果要刪除這兩個文件,我們也有一個clean命令
#make clean
這兩個文件已經被刪除了。
看看成果,#./test
輸出Hello World!啦。
到此,Hello World! 就結束了。

我們在學C語言的時候,好像在寫main函數的時候可以不需要參數,而且返回類型也可以是void型。而這裏卻寫成了 int main(int argc,char **argv)有所不同。
檢驗一下返回類型,改寫爲:
void main(int argc,char **argv)
{
    printf("Hello World!/n");
}
保存->make,提示:
    在函數 ‘main’ 中:
    警告:‘main’ 的返回類型不是 ‘int’
由此可知這裏的main函數的返回類型應該爲int,否則就有warning;
再改寫:
int main(int argc,char **argv)
{
    printf("Hello World!/n");
    printf("argc == %d/n",argc);
    printf("argv[0] == %s/n",argv[0]);
    printf("argv[1] == %s/n",argv[1]);
}
保存->make,通過編譯了。
#./test Hello_World
結果輸出:
Hello World!
argc == 2
argv[0] == ./test
argv[1] == Hello_world
結果,已經顯示了main的參數的作用。這樣的用法在學C的時候就很少提,如果一直在windows下寫程序,可能也很少注意到這樣的用法。而在編寫一些DOS下運行的小工具的時候就需要這樣的用法了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章