一、 上篇要点回顾和点评
1、 上篇对hello world程序进行了比较深入分析。
2、 一个完整程序是什么样的?分几个部分组成?请回顾一下!
3、 谈了main,这个是讨论最激烈的话题。请问为啥我没有写成 int main(void)?
4、 上篇还谈了,语法、函数的调用、.h的引用、关键字、转义符、流。还记得吗?
5、 知道exit和return的区别和用的地方吗?
6、 布置了思考题:显示三个hello world!你是怎样完成的?
1)连续写3行fprintf
2)用循环语句循环3次fprintf
3)在原fprintf中hello world!\n后面,添加hello world!\n hello world!\n
4)其他方法。
你是用哪种方法?。
出这思考的目的就是告诉大家,一个问题有很多答案,但是不同答案一定有优劣之差。我们不但要给出答案,而且要给出最佳答案,这样我们才能提升我们的编程水平。
7、 上篇最重要的是,提出来程序好坏的比较的量化标准,那就是程序的长短。没有了量化标准,任何一个程序员都会说自己的最好,(很多人习惯这种思维方式,用每个人有每个人方法,这样可以保护自己的弱点,但是他们不知道,这种保护是你进步最大的障碍)如果这样程序也无所谓好坏来,但是,事实上程序差距是很大的。其他的方面的好坏都应该建立这个基础之上。
二、 编辑在C语言中的作用
1、编辑的概念和内容
我们一直说编程的流程:编辑、编译、运行.其中,编辑是编程的第一步。你能说出什么是编辑?编辑文件有哪些吗?一般而言编辑主要是指编辑工具和编辑内容两个方面。编辑工具是指编辑文件的软件。而编辑内容主要是建立项目中的各种源程序、批处理程序和参数文件。记住:编辑是指1、编辑各种源程序 2、批处理程序 3、参数文件。记住这些我们可以有个概念上的掌握。有了这个概念的掌握,今后我们就可以有意识地去去知道我们要掌握那些东西,为这些做好准备。
1) 源程序
是指包含程序语言的语句,通过编译可以变成可执行文件和中间文件。例如,C语言中的 *.c、 *.h文件.
2) 批处理文件
是指操作系统可以逐行执行的文本文件。这个在C语言中应用很多,例如,批编译命令文件、shell命令等。
3) 参数文件
是指程序中为了灵活适应特定的变化,而建立的数据文件。参数文件的特点是不可执行,但可以被程序所调用。
2、编辑工具
从理论上来说,任何文本编辑软件都可以作为程序的编辑工具。记住这句话有什么用?就是当你想去修改一个源程序的时候,不必非要安装这个语言的开发环境,随手找个编辑软件编辑一下就可以了。由于源程序是文本文件,所以只要能够打开这个文件就可以编辑了。
给新手回忆一下过去的C语言编辑软件:开始的时候,编辑软件和程序设计语言是相分离的。DOS系统那时用的是EDLINE,unix 用的是vi。后来DOS用的是EDIT,再后来用的是记事本、word等,再后来就直接用语言中自带的文本编辑器了。
3、编辑的作用
1、产生源程序
如果我们连编辑都不会,那我们就无法产生源程序,那我们就无法成为程序员了。程序员第一个职责可能就是会编写程序。可见掌握编辑工具是多么重要。
2、编辑程序
程序并不是一次产生就ok,在绝大多数情况下,程序员要不断地修改,不断地增加自己的程序,而编辑正是实现这种修改的有利的工具,没有编辑工具,发现程序错误,就可能无法修改。
3、调试程序
我们在调试程序的时候,会查看源程序到底是怎么写的。dbx 这个C语言调试程序中就提供了一个e命令,用vi打开源程序,以帮助调试者去发现错误的原因。
4、编辑程序用到的参数文件和批命令文件
现实中很少有那种没有参数的C语言的应用程序,C语言需要输入,才能加工后输出,因此程序员不但要编写程序,而且还要编辑参数文件,以便程序顺利运行。
另外,一个问题的解决很少是一个程序就能摆平的,因此,逻辑性地运行不同的程序,即使得程序更加模块,又可以使得程序组合更加灵活,更可以让程序象接龙一样,不断向前。因此,编辑批命令文件也是编辑程序一个重要的功能。
三、 如何学习vi
下面言归正传,C语言可以有很多编辑程序:有行编辑,有屏幕编辑,有unix的编辑,有window的编辑,有功能强大的编辑程序,也有功能简单的编辑程序,有开发语言自带的编辑程序,也有独立的编辑程序。以我的经验,如果你是专业从事unix环境的后台程序开发的,且用C语言的,vi一定是首选的编辑程序。
1、 首先学习vi并不难,千万不要有畏难情绪,任何人都能学会,而且时间不长,有人指导,一般一天就足够入门了。
2、 最好找一个懂vi的人作为咨询对象,不要抱着书学,然后就可以开始进行了。
3、 注意学习方法,先不要问为啥,先按要求去做,学会模仿,然后再自己琢磨。
4、 在练习之前,大家要记住2点:第一,vi不是一个屏幕编辑器,而是一个行编辑,以行为单位进行的编辑。不用鼠标,只能手打。第二个,vi是一个区分大小写的。因此要特别注意vi中各种命令的大小写。
下面我以实战方式,试着教教大家学习vi。
第一步:学习进入vi和退出vi
首次学习vi的朋友,可以先从运行vi开始。
我们假定编辑的文件名为a.c,则在操作系统的命令行状态下,键入:vi a.c(命令行结束都需要键入回车,这里就不在提示了.另,注意在UNIX操作系统下是认大小写的,不要将vi写成大写VI)
这时你则进入了vi.这时你会看到在屏幕的左下方,显示a.c [New file],这是vi告诉你,你正在编辑a.c,a.c是一个新文件。
进入后,你别急于编辑文字。立即键入::q回车。这时你从vi退出到操作系统命令行状态了。q应该是quit缩写吧。
将进入和退出操作多练习几遍,你就已经学会了使用最简单的vi了。在此间,你要克制如何编辑冲动,先把进入和退出掌握好。学习的时候,我们往往往前考虑过多,其实没有必要,一般只要按部就班学习就行了。在眼前,就学眼前,不要多想。第一步会了,我们往下走。
第二步,学习增加字符串。
这个步骤就是学习如何在vi中增加一个字符串,或者说录入一个字符串。假定,我们要在a.c中录入,“hellow world!”这个字符串。 请按下面次序一字不漏地输入,别输错字符。
1)vi a.c
2)i
3)hellow world!
4)Esc
5):
6)x
如果你顺利输入完之后,这个a.c就有了“hellow world!”
你可以在命令行输入cat a.c就能看到:hellow world!,恭喜你会了录入字符串了。
这时你要记住:i是增加命令,表示此后的键入的字符都将录入其中,除非遇到Esc结束这个增加。所以,当你要录入字符串的时候,第一个就要想到i命令,这个命令我是这样记的:i就是insert。
你可以试着编辑一个b.c 内容是 hello myself!看看行吗?
第三步,学习修改、删除。
我们在编辑程序的时候,不可能一次增加就能完成。总是要修改,删除,增加。接上面的例子,我们要将a.c中的hello world!改成hello myself。
第一种方法:
1、vi a.c
2、dd
3、i
4、hello myself。
5、Esc
6、:
7、x
这种方法是同过dd命令将原来一行删掉,再通过i命令录入hello myself。来完成的。这种方法重点是dd命令,记住删除一行要用dd(delete,delete,我是这样记忆的)。
第二种方法:
1、vi a.c
2、将光标移到world
3、xxxxxx
4、i
5、myself。
6、Esc
7、:
8、x
这种方法重点是x命令,删除当前字符,这也是最常用的命令之一。
第三种方法:
1、vi a.c
2、将光标移到world
3、xxxxx
4、i
5、myself
6、Esc
7、移动光标到!
8、r
9、。
10、:
11、x
这种方法重点是r命令(replace),替换当前字符,这也是最常用的命令之一。
第四种方法:
1、vi a.c
2、将光标移到world
3、cw
4、myself。
6、Esc
10、:
11、x
这种方法重点是cw命令(change word),替换当前单词,注意它也需要Esc结束修改状态,这也是最常用的命令之一。
大家都看到了吧,所有以上方法都是用:x来保存编辑内容的。:x也是最常用命令之一。
如果发现这次编辑错了,乱了,想放弃这次对文件的编辑,不想对原程序进行任何修改。则可以用:q!命令放弃修改退出vi。!可以记忆为强制,q!可以理解为强制退出。同理x!理解为强制保存。
通过以上三步的学习和练习,我们基本上可以接触到vi的基本操作过程和操作命令了。这些基本的操作可以说能够编制程序了。
你们可以试着用以上方法,编辑一下我前几篇博客中的a.c。文件名可改为helloworld.c
#include “stdio.h”
main()
{
fprintf(stdout,”hello world!\n”);
exit(0);
}
感觉一下vi操作,看看自己对以上最基本命令的掌握程度。对基础的东西要反复练习,认真记住,这样才会对后面的操作命令有更好的理解和配合。学会以上操作可以说你vi已经入门了。
第四步,学习复制、查询、取消
我们在编辑程序的时候,一般情况下都是增删改操作,这时候我们的视野仅仅局限在单字符、单词、单行。在很多情况下,需要行操作,例如我们需要新增行,我们需要复制,需要先复制再修改。
我们还是举前面一个例子。现在a.c内容为hello myself。
现在要求最终的内容为三行:
hello myself
hello world
hello c
第一种方法,先复制,后修改。
1、vi a.c
2、yy
3、p
4、p
5、向上移动一行
6、移动到myself(第二行)
7、cw
8、world
9、Esc
10、移动到下一行
11、移动到myself(第三行)
12、cw
13、c
14、Esc
15、:x
这种方法的重点是复制,粘贴。yy是复制当前行,p是粘贴复制的行。这是我认为vi最经典的命令设计之一,它可能是我们Ctrl-c ,Ctrl-v的鼻祖。
第二种方法:直接插入法
1、vi a.c
2、o
3、hello word
4、hello c
5、Esc
6、:x
这种方法的重点是在当前行下插入。o是插入命令,表示在当前行下插入,Esc插入结束。如果要在当前行上面插入行输入大写O则可以了,退出插入也是Esc。
第三种方法:复制查询修改法。
1、vi a.c
2、yy
3、p
4、p
5、:1
6、/
7、myself
8、n
9、cw
10、world
11、Esc
12、n
13、cw
14、c
15、Esc
16、:x
这种方法的重点是先复制了2行hello myself,然后通过:1命令让光标移到文件头(这个命令非常有用),然后用/命令进行查找myself,用n(next)命令移到第二个myself单词上,用cw进行修改,然后再用n命令,移到第三个myself上,用cw修改。/命令是查找命令,n是下一个。现在一些开发语言中也有同样的查询命令,估计也借鉴了vi。
我们在进行操作时候,往往会操作出错,这时候,vi提供了一个u(undo吧)命令,用于取消前次操作。
例如,当你复制2行时候,发现复制了3行的时候,你键入u,则
1、vi a.c
2、yy
3、p
4、p
5、p
6、u
这个时候,你最后一次,粘贴将会被取消。
这个例子的重点是介绍取消操作u,这个命令可以用于很多种操作,比如,i、I、O、o、A、x、r、dd、cw、s等等。在这些操作之后,键入u,前面的操作将被取消。
另外,介绍一个G命令,这个命令可以让光标定位到文件的最后一行。
例如:文件内容为:
Hello world
Hello myself
Hello c
当前光标在第一行
键入G,光标就定位在最后一行hello c上了。这个命令对于建立一个程序的时候,特别有用。比如,今天编了一段程序,明天再接着编,就可以用G命令一下子到最后一行,然后,用o命令继续你的新程序的插入。
待续!