1、 3.1 Linux下C语言编程概述3.1.1 C语言简单回顾C语言的特点:(1)简洁紧凑、灵活方便(2)运算符丰富(3)数据结构丰富(4)C是结构式语言(5)C语法限制不太严格,程序设计自由度大(6)C语言允许直接访问物理地址,可以直接对硬件进行操作(7)C语言程序生成代码质量高,程序执行效率高(8)C语言适用范围大,可移植性好 3.1.2 Linux下C语言编程环境概述(1)编辑器 Linux下的编辑器就如Windows下的word、记事本等一样,完成对所录入文字的编辑功能。Linux中最常用的编辑器有Vi(Vim)和Emacs,它们功能强大,使用方便,广受编程爱好者的喜爱。(2)编译器
2、编译是指源代码转化生成可执行代码的过程。可见,在编译过程是非常复杂的,它包括词法、语法和语义的分析、中间代码的生成和优化、符号表的管理和出错处理等。在Linux中,最常用的编译器是Gcc编译器。(3)调试器 Gdb是绝大多数Linux开发人员所使用的调试器,它可以方便地设置断点、单步跟踪等,足以满足开发人员的需要。(4)项目管理器 Linux中的项目管理器“Make”有些类似于Windows中Visual C+里的“工程”,它是一种控制编译或者重复编译软件的工具。3.2 vi编辑器3.2.1 vi的工作模式1命令模式 当用户启动vi后,vi就处于命令模式。此时输入的任何字符都被当作编辑命令。如
3、i表示插入命令、r表示替换命令等。不管在什么时候,只要按一下Esc键,vi就会回到命令模式。2插入模式 在命令模式下,按字母i、a、o、r等命令就可以切换到插入模式。3末行模式 在插入模式下,按Esc键回到命令模式,再按冒号(:)键,就会转换到末行模式,此时光标停留在状态行上,并等待用户输入所需的末行模式的命令。用户可以用它来保存文件、装入另外的文件或退出vi。3.2.2 vi的启动和退出1启动vi 在系统提示符下输入vi及文件名称后,就进入vi全屏幕编辑界面。2退出vi当编辑完文件后,准备返回到shell状态时,需执行退出vi的命令。在命令行模式下,按一下冒号(:)键进入末行模式。(1):w
4、q 保存文件内容并退出编辑器,回到shell状态。(2):q!不保存内容强制退出vi。(3):ZZ 仅当编辑的内容做过修改时,才将将缓冲区的内容保存到文件。(4):x 与:ZZ功能相同。3.2.3 文本输入1插入命令(1)i 在i命令之后输入的内容都插在光标位置之前,光标后的文本相应向后移动。如按Enter键,就插入新的一行或者换行。(2)I 输入I命令后,光标移动到该行的行首,输入相应文本则插入到行首相应位置。2附加命令(1)a 在a命令之后输入的内容都插在光标位置之后。(2)A 输入A命令后,光标移动到该行的行尾,输入相应文本则插入到行尾相应位置。3打开命令(1)o 在光标所在行的下面新开
5、辟一行,输入的文本就插入该行。(2)O 在光标所在行的上面新开辟一行,输入的文本就插入该行。4移动光标 3.2.4 文本修改1.删除与替换(1)删除 在插入模式下,用Backspace键来删除前面的字符,还可以用Delete键来删除当前字符。也可在vi的命令模式下用一些命令来删除一个字符、一个单词或者整行内容等(2)替换在vi的命令模式下还提供了一些命令来替换字符、单词或者进行整行替换 2.复制、粘贴和剪切(1)复制 在vi编辑器中复制的方式有两种:鼠标方式和命令方式。鼠标方式同windows操作系统的复制操作类似,vi提供的复制命令见表 (2)粘贴与复制一样,vi编辑器中粘贴的方式也有两种,
6、且不同的复制方式对应不同的粘贴方式。粘贴方式同windows操作系统的粘贴操作类似,vi提供的粘贴命令很简单,有以下两种形式。p:在当前光标后面粘贴。shift+h:在当前光标前面粘贴。(3)剪切 在vi编辑器中,所有的删除命令也是剪切命令,因为删除的内容都被送到剪贴板中。如果用户用剪切命令剪切,可将剪切的内容使用粘贴命令粘贴。3.撤销使用撤销命令可撤销用户最后一次的操作。撤销命令很简单,有以下两种形式。u:取消上次的操作 U:可以恢复对光标所在行的所有改变。4.查找 vi提供字符串查找功能,包括向前查找、向后查找、继续上一次查找等。当vi向前查找,从光标当前位置向前查找,当找到文本的开头时,
7、它就到文本的末尾继续查找;当vi向后查找,从光标当前位置向后查找,当找到文本的最后时,它就到文本的开头继续查找。3.2.5 文件操作1.打开文件(1)打开一个文件在命令模式下,使用命令:vi file。其中file是指定路径的文件,如果没有指定路径,就默认为当前目录。例如,输入vi test 就可以打开当前目录下的test文件,此时按字母i或a就可以切换到插入模式进行文本输入。(2)打开多个文件vi能一次打开多个文件,使用命令:vi file1 file2。其中file1,file2是指定路径的两个文件,如果没有指定路径,就默认为当前目录。例如,输入vi test main.c 就可以打开当前
8、目录下的test、main.c文件。2.保存文件(1):w 将缓冲区的内容保存到当前文件中。(2):w file 将缓冲区的内容保存到名为file的文件中。如果用户另存为的file文件已经存在,则使用该命令保存时状态行会出现“File exists(add!to override)”的提示,即需使用“:w!file”命令来强制覆盖。(3):w!file 强制将缓冲区的内容保存到名为file的文件中。3.3 Emacs3.3.1 Emacs的基本操作1启动Emacs在系统提示符下直接输入emacs命令,则进入emacs的欢迎界面 2使用Emacs(1)复制、剪切和粘贴(2)查找文本(3)移动光标
9、(4)打开、保存和退出文件 3.3.2 Emacs的编译概述 Emacs不仅仅是个强大的编译器,它还是一个集编译、调试等于一体的工作环境。1Emacs中的模式 Emacs中并没有像Vi中那样的“命令行”、“编辑”模式,只有一种编辑模式。Emacs的“模式”,是指Emacs里的各种辅助环境。2Emacs编译调试程序 Emacs默认的编辑命令是对一个make的调用。用户可以打开“tool”下的“Compile”进行查看。Emacs可以支持大量的工程项目,以方便程序员的开发。另外,Emacs为Gdb调试器提供了一个功能齐全的接口。在Emacs中使用Gdb的时候,程序员不仅能够获得Gdb用其他任何方式
10、运行时所具有的全部标准特性,还可以通过接口增强而获得的其他性能。3.4 Gcc编译器3.4.1 Gcc简介GCC是GNU公社的一个项目,是一个用于编程开发的自由编译器。Gcc编译器能将C、C+语言源程序和目标程序编译、连接成可执行文件,如果没有给出可执行文件的名字,Gcc将生成一个名为a.out的文件。3.4.2 Gcc的基本用法和选项 Gcc最基本的用法是:gcc 选项 文件名常用的选项如下:-c:只编译,不连接成为可执行文件,编译器只是由输入的.c等源代码文件生成.o为后缀的目标文件,通常用于编译不包含主程序的子程序文件。-o output_filename:确定输出文件的名称为outpu
11、t_filename,同时这个名称不能和源文件同名。如果不给出这个选项,gcc就给出预设的可执行文件a.out。-g:产生符号调试工具(GNU的gdb)所必要的符号信息,要想对源代码进行调试,必须加入这个选项。-O:对程序进行优化编译、连接,采用这个选项,整个源代码会在编译、连接过程中进行优化处理,这样产生的可执行文件的执行效率可以提高,但是,编译、连接的速度就相应地要慢一些。3.4.3 编译多个源文件 许多重要的程序都是由多个源代码文件组成,并且执行最后的链接之前,各个源文件都必须编译成目标文件。为此,要向gcc传递要编译的每个源代码文件名。可以使用如下gcc命令来编译多个源文件:rootl
12、ocalhost root#gcc file1.c file2.c file3.c o programgcc将创建file1.o、file2.o和file3.o,然后把它们链接在一起创建program目标文件 3.5 Gdb调试器GDB四个方面的功能:(1)启动程序,可以按照自定义的要求随心所欲的运行程序。(2)可让被调试的程序在所指定断点处停住。(3)当程序被停住时,可以检查此时程序中所发生的事。(4)动态的改变程序的执行环境。3.5.1 启动Gdb 启动GDB的方法有以下几种:(1)gdb program program也就是执行文件,一般在当前目录下。(2)gdb core 用gdb同时
13、调试一个运行程序和core文件,core是程序非法执行core dump后产生的文件。(3)gdb 如果程序是一个服务程序,那么可以指定这个服务程序运行时的进程ID,gdb会自动进行调试。3.5.2 设置断点 Gdb中使用break命令来设置断点,该命令有如下四种形式:break line-number:使程序恰好在执行给定行之前停止。break function-name:使程序恰好在进入指定的函数之前停止。break line-or-function if condition:如果condition(条件)是真,程序到达指定行或函数时停止。break routine-name:在指定例程的
14、入口处设置断点 3.6 Make工程管理器Make工程管理器也是个“自动编译管理器”,这里的“自动”是指它能够根据文件时间戳自动发现更新过的文件而减少编译的工作量,同时,它通过读入Makefile文件的内容来执行大量的编译工作。3.6.1 Makefile基本概念 Makefile 文件相当于程序编译过程中的批处理文件。是工具程序make 运行时的输入数据文件。只要在含有Makefile 的当前目录中键入make 命令,它就会依据Makefile 文件中的设置对源程序或目标代码文件进行编译、连接或进行安装等活动。1Makefile变量 Makefile变量名是不包括“:”、“#”、“=”前置空
15、白和尾空白的任何字符串。同时,变量名中包含字母、数字以及下划线以外的情况应尽量避免,因为它们可能在将来被赋予特别的含义。变量名是大小写敏感的。Makefle中的变量使用均使用格式为:$(VAR)。Makefile变量分为用户自定义变量、预定义变量、自动变量及环境变量。2Makefile基本结构Makefile是Make读入的唯一配置文件,在一个Makefile中通常包含如下内容:(1)需要由make工具创建的目标体(target),通常是目标文件或可执行文件;(2)要创建的目标体所依赖的文件(dependency_file);(3)创建每个目标体时需要运行的命令(command)。3Makef
16、ile规则一般的,Makefile中的一条语句就是一个规则。make还定义了隐式规则和模式规则。(1)隐式规则 隐含规则能够告诉make怎样使用传统的技术完成任务,这样,当用户使用它们时就不必详细指定编译的具体细节,而只需把目标文件列出即可。(2)模式规则 模式规则是用来定义相同处理规则的多个文件的。模式规则能引入用户自定义变量,为多个文件建立相同的规则,从而简化Makefile的编写。3.6.2 Make管理器的使用使用make管理器非常简单,在make命令后键入目标名即可建立指定的目标:make target。通过命令行选项中的target,可指定make要编译的目标,并且允许同时定义编译
17、多个目标,操作时按照从左向右的顺序依次编译target选项中指定的目标文件。3.7 使用autotoolsautotools的使用流程(1)手工编写Makefile.am这个文件。(2)在源代码目录树的最高层运行autoscan,然后手动修改configure.scan文件,并改名为configure.ac或configure.in。(3)运行aclocal,它会根据configure.ac的内容生成aclocal.m4文件。(4)运行autoconf,它根据configure.ac和aclocal.m4的内容生成configure这个配置脚本文件。(5)运行automake-add-missing,它根据Makefile.am的内容生成Makefile.in。(6)运行configure,它会根据Makefile.in的内容生成Makefile这个文件。