Linux 下的“Hello world!”

来源:互联网 发布:阿里云的产品 编辑:程序博客网 时间:2024/05/17 08:43
 早就安装了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下运行的小工具的时候就需要这样的用法了。