博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

从C语言实战谈编程:hello world 程序解析(2011-10-23)

Posted on 2011-10-24 08:59  n216  阅读(5286)  评论(37编辑  收藏  举报

上篇要点回顾和点评:

1、            上篇谈了学习一门新语言要学会思考。请问,思考什么?

2、            上篇谈了编程流程,请问流程是什么?

3、            你自己编了helloworld程序了吗?一次编辑、编译成功了吗?

回答完了以上内容,请继续下面的内容。

本篇将对Hello world 程序作深入的解析

我们学习语言,要有好的学习方法,这就是学习或编写最少的语句,能达到对语言最佳的掌握。记住“最少”这两字。实际中很多程序员没有这个概念,能写上上千万万行程序,但是对其语言依然掌握不透。这就因为他们头脑里只看到具体的语句,具体的功能,看不到“抽象的语句、抽象的功能”,不能掌握语言的规律和原理,不能掌握学习语言的方法和技巧,不能举一反三。这些是新手们特别要注意的,千万不要向他们学呀。

不知道大家对上篇的a.c能总结点啥。一定会有人说,不就是显示一句helloworld吗?是最简单的程序了。我认同这是一个简单的程序,而且大家的关注点都在显示“hello world!”那一条语句上。但是,简单不简单,这个简单的程序包含了很多重要的内容。每行都是宝,都有讲头,都少不了。

通过这个程序我们应该掌握什么?

1、           一个完整的程序是什么。

 #include “stdio.h”

 main()

 {

       fprintf(stdout,”hello world!\n”);

      exit(0);

 }

  这就一个最简单的完整程序,只有6行。但是它告诉我们,一个C语言是由两个部分组成:定义和函数,至少有一个主函数。第一行#include “stdio.h”我们可以把它看做定义部分。第二行到第六行我们把它看做函数部分。知道这个组成有什么用?我们就可以对我们以后编的程序进行评判了。如果我们的程序没有定义,或没有主函数则一定不是个完整的。有人会说,我就不需要定义,我说行,那只是一种例外,99.99%的应用C语言都是要有定义的。对于新手来说,我们先不学例外,我们先学些正常的。学了这个构成,我们在编写C语言的时候,我们就会在想两个问题:我们的定义是什么?我们的函数是什么?

先记住这两个部分,今后我们还会对这两个部分进行深入的分析,比如,定义部分再怎么分,函数部分再怎么分。

2、           程序的main

   main这个函数也是一个语言的重要内容,有人会问,为啥必须要main函数?我写个aaa函数不行吗?如果你编写的是一个可执行程序,那可能真的不行,运行这个程序必须有一个统一唯一的入口,而C语言的这个入口这就是main。不是吗?如果没有main,你在程序中编了a函数,b函数,程序怎么知道先执行那个?是不是那个在前就先执行那个?那个在先,就先执行那个也是一种算法,但是,也有例外(今后会看到)。所以,人家规定了main为程序的入口是有它的道理的。

    你跟他说main,他马上会说知道了。是真的知道吗?要真的掌握main的道理,就会在学习其他语言时候,就会有意识地去找相应的入口函数。比如,VFP中的load,C#窗体中的page_Load都是一个程序的最初的入口。

记住只要有多个函数必然就有一个主函数,找到主函数我们就可以进行最初的处理。比如初始化什么的。

当然,随着语言的发展,一些语言的主函数是可以通过用户定义的了。但是,其原理还是不变的。

3、           程序的语法

    大家老是说语法语法的,什么是语法?语法就是语言的规定,是语言的法律,违背了这个规定,这个程序就玩不转,就出错。看来我们程序员编程也要受逃脱不了法制社会的约束呀。

 1#include “stdio.h”

      意为包含文件,也是引用的意思。语法就是#include+“”+文件名。

如果,你把include 拼错了、没有加#、不是成对的双引号、后面多加了分号。

则编译通不过了,出错了,违法了嘛。

 2main()

 意为主函数,是程序的最先的入口。函数后面必须有一对刮号。如果你换了成大刮号,换成中刮号,或只有一个小刮号,或后面加了分号就不符合语法了,出错了。函数后面是一对小刮号且没有分号就是一个语法规定。

3{}是函数体边界符合,在此之内都属于这个函数。不能少一个,多一个大刮号。

 

4、           函数的调用

编程序最常用的方法就是函数调用,函数调用就是避免重复编写编码,用现有的编码。由于,C语言中的函数调用是不收费的,能调用还不调用?虽然这是一句调侃。但是,调用函数绝对是程序员最重要的任务之一,程序员不但要调系统函数,而且要调用他人的函数,更多的是要调用自己的函数。本程序有两个函数调用:

1)fprintf(stdio,“hello world!\n”);

记住函数调用要掌握:函数名+参数+;这三个部分。

下次写函数调用一定要记住呀。少一个都不行。这个真的要记住,记住了就会在调用函数时,或想调用函数时,考虑函数名是什么?函数的参数是什么?“;”是不是忘掉写了。

   在很多情况下,我们往往会注重前两者,忘记“;” 结果编译总是出错。如果你是初学者,一定要把这基础打好,在今后的编程中不要出现这个问题。

    只是,当你学了不同的语言后,你往往会混淆,比如VFP中语句后面就没有“;”。这个时候,你就会在VFP中加分号,在C语言不加分号,让人哭笑不得。

2exit(0);

  这是一个退出程序的函数。有进必有出。有了出,你就可以在程序中随时中断处理,退出程序。退出函数也很重要,初学者也要牢记。参数中的0,表示程序返回值为0。在80%的情况下,程序的返回值是没有什么用的,我都处理完了,返啥都一个样。但是,在一个大的项目中,在程序之间发生关系的时候,返回值就可能是一个重要的纽带,那你就会要学会使用程序的返回值。好在我们后面的实战中有这方面的例子。这里你就会使用exit(0);就行了。一些老一点程序员会大喊,我不用exit0),程序照样退出来。是的,没有exit0),程序退出来的,但是,作为一个完整的程序而言,有进有出还是必须的。省了一条语句功能上应该没啥问题,但是失去了可读性了。还是加上exit0)吧,正规的编写,会产生好的习惯,而好的习惯会让你更加正规。

 

5、           .h的引用

.h文件,往往是一个定义文件,定义一些常量、结构、外部数据,有些定义是有条件的。一般情况下,一个C语言至少要引用3个以上的系统文件。意为包含文件,也是引用的意思。从直白上来说,它将一部分源程序放到了外部了。这样自己的源程序看起来更加简洁。对于新手来说,#include 一般都包含一些系统的*.h 例如 stdio.h 可读作“标准io”。对以高手来说#include会包含一些自己的.h

       #include 后面有“”,<> 两种方式包含文件。一般用“”就行了。除非你不用<>不行。这里我特地停下来谈一下实用问题。学语言强调就是一个实用,不是让你成为一个语言学家。就#include 而言,你掌握一种包含方法就行了,不必要弄清两者的区别。因为,在你若干年之内,可以说,你是很难取一个和系统相同的.h文件的。如果,你非要学一个从系统目录开始搜寻,一个从当前目录开始搜寻差别有意义吗?有意义的事多的去,就怕你没有时间去学。

记住:

1)#include一般情况下引用的定义文件,在特殊情况下也可以引用函数文件。或定义与函数相结合的文件。

2)#include一般情况下引用的是系统的文件,在特殊的情况下,可以引用自己的定义文件和函数文件。

6、           关键字

程序虽然只有六行,但是,像include,main都是关键字。所谓关键字就是系统启用的名字。你就不能起相同的名字了。比如,你就不能自己起一个名为main的函数。而今后,我们将会遇到更多的关键字,例如:if、else、while int char等等。有了这个初步的概念后,我们今后可以更加关注关键字,避免关键字。一般而言,水平越高的程序员,往往会碰到自己命名与系统命名重复的问题。因为他会越来越接近系统程序员,而新手则鲜有遇到这种情况。

7、转义符

   程序中fprintf(stdio,“hello world!\n”);中\n是很有意思的。

   \n是换行的意思。n 可以记为new line.这样就好记一些。在C语言中,一些不可显示的控制字符,是通过转意符加符号表示的。与\n一起的还有\r回车符(return)等。另外,一些关键字符\平常化,则要加\,例如\\表示\.

 转义符这个在C语言中也是比较重要的概念,也是常用的。

8、流的应用

   程序中fprintf(stdio,“hello world!\n”);中的stdio是一个标准输出,就是一个流。所谓流你可以把它看做一个渠道。这个渠道可以通往一个设备、一个文件,也可以通往下一个流。流是很有讲头的。内容很多,这里运行这个程序流就显示到屏幕上。

如果在命令行中输入./a.out>1.txt

则屏幕上并不显现hello world!, 而hello world!则产生到1.txt文件中去了。

在命令行接着输入cat 1.txt

就可以看到hello world!了。

这说明流被改向到文件了。

 

如果,你没有看到以上的归纳,你就能对新手讲了以上的内容,说明你的基础很好,反之,你只看到显示hello world!这条语句怎么写,而无话可说,我只能说你需要加强基础训练,要改变自己的学习方法,多思考,多用最小的程序去思考。

 

如果有人要问,我已经会编hello world!下面我该编什么?我建议去修改一下程序,显示3遍 hello world。到时候我会给程序做给评判。

 

本不想对hello world做深入的分析的,但是,你要成为高手,就要懂得万丈高楼平地起的道理,我还是想借这个平地,将基础的东西多讲一讲,基础好才是真的好。