




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 1. 项目课题引入 2. Vi编辑器的使用方法 3. Linux中C语言程序的编辑 4. Linux中C语言程序的运行 5. 现场演示案例 课题引入项目背景 在Linux操作系统中设计一个C语言程序,当程序运行 时显示如下的运行效果: 课题引入项目分析 完成本项目需要解决的问题: 1、在Linux下我们使用什么工具进行程序 和文字的编辑。 2、在Linux操作系统中我们如何编译和运 行C程序 3、我们编写的程序如何在Linux操作系统 中进行调试。 课题引入教学目标 学习本课需要实现的教学目标: 掌握Vi编辑器的启动和退出 掌握Vi编辑器的工作模式 熟悉Vi编辑器的基本命令 掌握C/C+编译
2、器gcc的使用 掌握Linux下程序设计的一般方法 课题引入应达到的职业能力 学生学习本课后应该具有的职业能力: 熟练掌握Vi编辑器的使用方法 能够利用Vi编辑器进行文字编辑工作 能够使用gcc进行C/C+程序的编译和调试 能够独立完成基本的Linux程序 项目问题一Vi编辑器的使用 Vi编辑器包含的主要内容有: Vi编辑器的启动与退出 Vi编辑器的工作模式 Vi编辑器的常用命令 Vi编辑器的简介 l Vi是Visual interface的简称,它可以执行输出、删除、 查找、替换、块操作等众多文本操作 l 用户可以根据自己的需要对Vi进行定制,这是其他编 辑程序所没有的。 l Vi不是一个排
3、版程序,它不像WORD或WPS那样可 以对字体、格式、段落等其他属性进行编排,它只是 一个文本编辑程序。 l Vi是全屏幕文本编辑器,它没有菜单,只有命令。 Vi的启动 l 在系统提示符后输入Vi和想要编辑(或建立)的文件 名,便可进入Vi l 如果只输入Vi,而不带文件名,也可以进入Vi Vi编辑器的退出 l 要退出Vi,在命令模式下键入如图所示命令。 l 其中:wq和:x是存盘退出,而:q是直接退出。可以 用:w命令保存文件后再用:q 退出,或用:wq或:x命令 退出。 l 如果你不想保存改变后的文件,你就需要用:q!命令, 这个命令将不保存文件而直接退出Vi Vi的工作模式 l Vi有3
4、种基本工作模式:编辑模式、插入模式和命令模式。 l 进入Vi之后,首先进入的就是编辑模式,进入编辑模式后Vi等待编辑命令 输入而不是文本输入,也就是说这时输入的字母都将作为编辑命令来解释。 l 在编辑模式下输入插入命令i、附加命令a、打开命令o、修改命令c、替换 命令s都可以进入插入模式。在插入模式下,用户输入的任何字符都被Vi 当作文件内容保存起来,并将其显示在屏幕上。在文本输入过程中(插入 模式下),若想回到命令模式下,按ESC键即可。 l 在编辑模式下,用户按“:”键即可进入命令模式,此时Vi会在显示窗口的 最后一行(通常也是屏幕的最后一行)显示一个“:”作为命令模式的提示 符,等待用户
5、输入命令。 Vi编辑器中的常用命令 l 在编辑模式下,输入如表所示的命令均可进入插入模 式 文件相关命令 l 使用下表中的命令可以在Vi中进行文件相关的操作 字符串搜索、替换和删除 l 使用下表中的命令可以进行字符串的相关操作 文本的复制、删除和移动 l 使用下表中的命令,可以进行文本的相关操作 在Vi编辑器中执行shell命令 l使用下表中的命令,可以进行shell中的命令 项目问题二C程序的编译 l Linux应用程序表现为2种特殊类型的文件:可执行文 件和脚本文件。可执行文件是计算机可以直接运行的 程序,相当于Windows的.exe文件。脚本文件是一组 指令的集合,相当于Windows
6、的.bat文件。 l 在POSIX兼容的系统中,C语言编译器被称为 c89.Linux尽量实现相关标准,c89,cc和gcc这些命 令全都指向系统的C语言编译器,通常是GNU C编译 器,或者称为gcc。 gcc编译器 l 在为Linux开发应用程序时,绝大多数情况下使用的都是C语 言,因此几乎每一位Linux程序员面临的首要问题都是如何灵 活运用C编译器。 l GCC不仅功能非常强大,结构也异常灵活。最值得称道的一点 就是它可以通过不同的前端模块来支持各种语言,如Java、 Fortran、Pascal、Modula-3和Ada等。 l 开放、自由和灵活是Linux的魅力所在,而这一点在GC
7、C上的 体现就是程序员通过它能够更好地控制整个编译过程。在使 用GCC编译程序时,编译过程可以被细分为四个阶段: 预处理(Pre-Processing) 编译(Compiling) 汇编(Assembling) 链接(Linking) gcc起步HelloWorld l 在用户当前目录,使用Vi编辑器输入如下代码,并保存 成文件hello.c: #include int main(void) printf (Hello world, Linux programming!n); return 0; l 然后执行下面的命令编译和运行这段程序: 编译:gcc hello.c -o hello 运行:
8、./hello Hello world 结果:Linux programming! gcc编译过程 l 从 程序员的角度看,只需简单地执行一条GCC命令 就可以了,但从编译器的角度来看,却需要完成一系 列非常繁杂的工作。 l 首先,GCC需要调用预处理程序 cpp,由它负责展 开在源文件中定义的宏,并向其中插入“#include” 语句所包含的内容。 l 接着,GCC会调用ccl和as将处理后的源代码编译成 目 标代码。 l 最后,GCC会调用链接程序ld,把生成的目标代码链 接成一个可执行程序。 gcc编译过程 l 第一步是进行预编译,使用-E参数可以让GCC在预处理结束 后停止编译过程:
9、gcc -E hello.c -o hello.i 此时若查看hello.i文件中的内容,会发现stdio.h的内容确实都插到文件 里去了,而其它应当被预处理的宏定义也都做了相应的处理。 l 第二步是将hello.i编译为目标代码,这可以通过使用 -c参数来 完成: gcc -c hello.i -o hello.o GCC默认将.i文件看成是预处理后的C语言源代码,因此上述命令将自 动跳过预处理步骤而开始执行编译过程,也可以使用-x参数让GCC从 指定的步骤开始编译。 l 最后一步是将生成的目标文件链接成可执行文件: l gcc hello.o -o hello gcc警告提示功能 l 看看
10、如下illcode.c程序,这段代码写得很糟糕,仔细 检查一下不难挑出很多毛病: #include void main(void) long long int var = 1; printf(It is not standard C code!n); lmain函数的返回值被声明为void,但实际上应该是int l使用了GNU语法扩展,即使用long long来声明64位整数, 不符合ANSI/ISO C语言标准 lmain函数在终止前没有调用return语句。 gcc警告提示功能 l 当GCC在编译不符合ANSI/ISO C语言标准的源代码时,如果加上了- pedantic选项,那么使用了扩
11、展语法的地方将产生相应的警告信息: # gcc -pedantic illcode.c -o illcode illcode.c: In function main: illcode.c:9: ISO C89 does not support long long illcode.c:8: return type of main is not int l 需要注意的是,-pedantic编译选项并不能保证被编译程序与ANSI/ISO C 标准的完全兼容,它仅仅只能用来帮助Linux程序员离这个目标越来越近。 或者换句话说, -pedantic选项能够帮助程序员发现一些不符合 ANSI/ISO C
12、标准的代码,但不是全部,事实上只有ANSI/ISO C语言标准中要求进行 编译器诊断的那些情况,才有可能被GCC发现并提出警告。 l 除了-pedantic之外,GCC还有一些其它编译选项也能够产生有用的警告 信息。这些选项大多以-W开头,其中最有价值的当数-Wall了,使用它能 够使GCC产生尽可能多的警告信息: # gcc -Wall illcode.c -o illcode illcode.c:8: warning: return type of main is not int illcode.c: In function main: illcode.c:9: warning: unus
13、ed variable var l GCC给出的警告信息虽然从严格意义上说不能算作是错误,但却很可能成 为错误的栖身之所。一个优秀的一个优秀的Linux程序员应该尽量避免产生警告信息,程序员应该尽量避免产生警告信息, 使自己的代码始终保持简洁、优美和健壮的特性使自己的代码始终保持简洁、优美和健壮的特性。 gcc警告提示功能 l 在处理警告方面,另一个常用的编译选项是-Werror,它要求 GCC将所有的警告当成错误进行处理,这在使用自动编译工 具(如Make等)时非常 有用。如果编译时带上-Werror选项, 那么GCC会在所有产生警告的地方停止编译,迫使程序员对 自己的代码进行修改。只有当相
14、应的警告信息消除时,才 可 能将编译过程继续朝前推进。执行情况如下: gcc -Wall -Werror illcode.c -o illcode cc1: warnings being treated as errors illcode.c:8: warning: return type of main is not int illcode.c: In function main: illcode.c:9: warning: unused variable var l 对Linux程序员来讲,GCC给出的警告信息是很有价值的,它 们不仅可以帮助程序员写出更加健壮的程序,而且还是跟踪 和调试程
15、序的有力工具。建议在用GCC编译源代码时始终带 上-Wall选项,并把它逐渐培养成为一种习惯,这对找出常见 的隐式编程错误很有帮助。 项目问题三C程序的调试运行 l 我们编写的程序经过编译之后可以使用如下方法进行 运行: ./生成的程序名 (其中“./”表示当前的工作目录) 将生成的程序目录加入到系统搜索路径的PATH变量(我 们将在Shell编程课程中进行介绍) l 如果编译过程出现错误,需要进行程序的调试,这时 我们需要使用的工具是gdb 程序调试工具gdb l 对于Linux程序员来讲,GDB(GNU Debugger)通 过与GCC的配合使用,为基于Linux的软件开发提供 了一个完善
16、的调试环境。 l 默认情况下,GCC在编译时不会将调试符号插入到 生成的二进制代码中,因为这样会增加可执行文件的 大小。如果需要在编译时生成调试符号信息,可以使 用GCC的-g或者-ggdb选项。 l 使用任何一个调试选项都会使最终生成的二进制文件 的大小急剧增加,同时增加程序在执行时的开销,因 此调试选项通常仅在软件的开发和调试阶段使用。 程序调试工具gdb l 我们使用如下代码说明gdb的使用: #include int main(void) int input =0; printf(Input an integer:); scanf(%d, input); printf(The integer you input is %dn, input); return 0; l 编译并运行上述代码,会产生一个严重的段错误 (Segmentation fault)如下: gcc -g crash.c -o crash ./crash Input an integer:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 皮肤科高级职称考试题库及答案
- 事业单位畜牧兽医考试题库及答案详解
- 金融机构客户资产配置与财富管理服务协议
- 无人机销售合同签订与操作培训及售后服务协议
- 离婚协议签署后反悔权行使与法律后果合同解析
- 电商平台担保合同消费者权益保护与平台责任落实
- 基于消费升级的商铺租金递增调整协议书
- 离婚协议书中涉及股权分割及共同债务处理的范本
- 教育机构线下校区2025年扩建项目社会效益评估报告
- 自建房买卖合同范本6篇
- 电力营销考试题库及答案
- 监察法专题培训课件
- 人证网约车考试题目及答案
- 宗教法律法规课件
- 钣金冷冲压激光切割折弯检验作业指导书
- 综合安防管理平台操作手册
- 2025秋部编版(2024)八年级上册历史 【教学课件】第1课《鸦片战争》
- 【石河子】2024新疆石河子市事业单位笔试附带答案详解
- 矿山视频监控设备管理制度
- 2025至2030年中国微晶石墨材料行业市场运行态势及发展战略研判报告
- 一年级语文上册习题:部编每日拼读练习
评论
0/150
提交评论