如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
一.Linux下的文本编辑器(一)vi及其运行模式vi简介vi是“visualinterface”的简称。vi可以执行内容显示、删除、查找、替换等文本编辑操作。vi不是排版程序,只是一个文本编辑器。vi是全屏幕文本编辑器,它无菜单,只有命令。vi的运行模式图35.vi的运行模式及转换(二)vi的基本操作从编辑模式进入插入模式iao从插入模式返回编辑模式<ESC>编辑模式下退出viZZZQ命令模式下退出vi:wq:q:q!编辑模式下的常用命令G用于直接跳转到文件尾。dd删除光标所在的整行。YY将当前行的内容复制到缓冲区。p将缓冲区的内容写出到光标所在的位置。/str往右移动到有str的地方。?str往左移动到有str的地方。n向相同的方向移动到有str的地方。N向相反的方向移动到有str的地方。u取消前一次的误操作。.再执行一次前面刚完成的某个命令。二.Linux下的GCC编译器Linux下最常用的C语言编译器是GCC(GNUCompilerCollection)在使用GCC编译程序时,编译过程可以被细分为四个阶段:▲预处理(Pre-Processing)▲编译(Compiling)▲汇编(Assembling)▲链接(Linking)Linux程序员可以根据自己的需要让GCC在编译的任何阶段结束实例学习GCC编译器清单1:hello.c#include<stdio.h>intmain(void){printf("Helloworld,Linuxprogramming!\n");return0;}执行下面的shell命令编译和运行这段程序:#gcchello.c-ohello#./helloHelloworld,Linuxprogramming!从程序员的角度看,只需简单地执行一条GCC命令就可以了,但从编译器的角度来看,却需要完成一系列繁杂的工作。首先,GCC需要调用预处理程序cpp,由它负责展开在源文件中定义的宏,并向其中插入"#include"语句所包含的内容;接着,GCC会调用ccl和as将处理后的源代码编译成目标代码;最后,GCC会调用链接程序ld,把生成的目标代码链接成一个可执行程序。为了更好地理解GCC的工作过程,可以把上述编译过程分成几个步骤单独进行,并观察每步的运行结果。第一步是进行预处理,使用-E参数可以让GCC在预处理结束后停止编译过程:#gcc-Ehello.c-ohello.i此时若查看hello.i文件中的内容,会发现stdio.h的内容确实都插到文件里去了,而其它应当被预处理的宏定义也都做了相应的处理。下一步是将hello.i编译为目标代码,这可以通过使用-c参数来完成:#gcc-chello.i-ohello.oGCC默认将.i文件看成是预处理后的C语言源代码,因此上述命令将自动跳过预处理步骤而开始执行编译过程,也可以使用-x参数让GCC从指定的步骤开始编译。最后一步是将生成的目标文件链接成可执行文件:#gcchello.o-ohello通常整个程序是由多个源文件组成的,相应地也就形成了多个编译单元,使用GCC能够很好地管理这些编译单元。假设有一个由foo1.c和foo2.c两个源文件组成的程序,为了对它们进行编译,并最终生成可执行程序foo,可以使用下面这条命令:#gccfoo1.cfoo2.c-ofoo如果同时处理的文件不止一个,GCC仍然会按照预处理、编译和链接的过程依次进行。上面这条命令大致相当于依次执行如下三条命令:#gcc-cfoo1.c-ofoo1.o#gcc-cfoo2.c-ofoo2.o#gccfoo1.ofoo2.o-ofoo在编译一个包含许多源文件的工程时,若只用一条GCC命令来完成编译是非常浪费时间的,还要借助像Make这样的工具。警告提示功能GCC包含完整的出错检查和警告提示功能,可帮助程序员写出更专业和优美的代码。清单2:illcode.c#include<stdio.h>voidmain(void){longlongintvar=1;printf("ItisnotstandardCcode!\n");}这段代码写得很糟糕,有很多毛病,如:▲main函数的返回值被声明为void,但实际上应该是int;▲使用了GNU语法扩展,即使用longlong来声明64位整数,不符合ANSI/ISOC语言标准;▲main函数在终止前没有调用return语句。使用gcc时若加上-pedantic选项,将产生相应的警告信息:#gcc-pedanticillcode.c-oillco