红联Linux门户
Linux帮助

Linux下的“Hello world!”

发布时间:2007-06-03 16:54:33来源:红联作者:Prospect
  早就安装了redhat的FC,起初在linux下真是感觉寸步难行,半天也安装不上一个软件。平时在windows下进行嵌入式开发,对linux下 的一些概念略知一二,加上网络上的丰富资源,没过多久也知道个大概了。用了几天,感觉在linux下,一切都变的麻烦了,而且软件运行速度也比较慢。结 果,一时热度过后,就很少进linux系统了。

  前几天听说F7发布了,又来了兴趣。于是想新版是不是有提高,希望能够延续自己的兴趣。不管怎么样下了再说。花了一个晚上,终于下完了。这次轻车熟路, 安装软件都比较顺利,但系统本身的安装还是比较吗。这过程中,一种明显的体会就是,F7的效率明显提高了,默认字体漂亮了,中文输入法智能拼音也比较好 用,还有Stardict等等,总之比FC6的感觉好多了。有了一个好的系统,当然就不容易失去兴趣。开始学习在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下运行的小工具的时候就需要这样的用法了。
文章评论

共有 30 条评论

  1. carlote 于 2007-11-12 23:09:26发表:

  2. 62.57.247.* 于 2007-07-18 07:09:56发表:

    http://f139d4ec80ef6ba91444f048c044ca3c-t.xkktxb.org f139d4ec80ef6ba91444f048c044ca3c http://f139d4ec80ef6ba91444f048c044ca3c-b1.xkktxb.org f139d4ec80ef6ba91444f048c044ca3c http://f139d4ec80ef6ba91444f048c044ca3c-b3.xkktxb.org 8d1f2bfe3cbc5359328d95464cab8b7c

  3. 88.148.61.* 于 2007-06-21 19:05:15发表:

    http://4ec7cf8b617baad3722f9c97627432b7-t.xlbmro.org 4ec7cf8b617baad3722f9c97627432b7 http://4ec7cf8b617baad3722f9c97627432b7-b1.xlbmro.org 4ec7cf8b617baad3722f9c97627432b7 http://4ec7cf8b617baad3722f9c97627432b7-b3.xlbmro.org 02564f07df4f7f30c664742ee44edb7d