软件工程师语言实用教程

上传人:nu****n 文档编号:249382421 上传时间:2024-10-29 格式:PPTX 页数:38 大小:376.78KB
返回 下载 相关 举报
软件工程师语言实用教程_第1页
第1页 / 共38页
软件工程师语言实用教程_第2页
第2页 / 共38页
软件工程师语言实用教程_第3页
第3页 / 共38页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,*,第 1 章,Linux系统程序设计基础,本章重点,编辑、编译及运行Linux c程序,gcc编译器的使用,gdb调试器的使用,2,1.1 第一个Linux c程序,例1-1:设计一个程序,要求在屏幕上输出“这是第一个Linux c程序!”。,步骤 1:设计编辑源程序代码,使用文本编辑器vim,在终端中输出:,rootlocalhost root#vim 1-1.c,输入完成后存盘:按ESC键输入“:wq”回车,3,1.1 第一个Linux c程序,步骤 2:,编译程序,查看当前目录下是否有1-1.c文件,输入命令:,rootlocalhost root#ls,1-1.c,编译:,rootlocalhost root#gcc 1-1.c -o 1-1,rootlocalhost root#,步骤 3:,运行程序,rootlocalhost root#,ls,1-1.c 1-1,rootlocalhost root#,./1-1,这是第一个Linux c程序!,4,1.1 第一个Linux c程序,Linux下的文本编辑器软件主要有vim、gedit和Emacs,Linux下的c编译器中,gcc是功能最强大、使用最广泛的软件。,gcc编译的常用格式为:,gcc C源文件 -o 目标文件名,或:gcc -o 目标文件名 C源文件,或:gcc 目标文件名,最后一种情况目标文件名默认为:c.out,5,1.1 第一个Linux c程序,printf函数说明,思考题:设计一个程序,要求在屏幕上输出:,*,*,*,*,6,1.2 gcc编译器,gcc是(GNU Cmpiler Collection的简称),它是GNU项目中符合ANSI C标准的编译系统,能够编译用C、C+和Object C等语言编写的程序。,gcc不仅功能十分强大,结构也异常灵活。它可以通过不同的前端模块来支持各种语言,如Java、Fortran、Pascal、Modula-3和Ada等。,gcc是可以在多种硬体平台上编译出可执行程序的超级编译器,其执行效率与一般的编译器相比,平均效率要高20%30%。,gcc支持编译的后缀名:,7,1.2.1 使用gcc,gcc指令的一般格式为:,gcc 参数 要编译的文件 参数 目标文件,例1-2:,设计一个程序,要求把输入的百分制的成绩转换成五级制输出。即输入成绩大于等于90分,显示“优秀”;若成绩介于8090分,显示“良好”;若成绩介于7080分,显示“中等”;若成绩介于6070分,显示“及格”;若成绩小于60分,显示“不及格”。,8,1.2.1 使用gcc,步骤 1:,编辑源程序代码,rootlocalhost root#,vim 1-2.c,9,1.2.1 使用gcc,步骤 2:,用gcc编译程序,rootlocalhost root#,gcc 1-2.c o 1-2,步骤 3:运行程序,rootlocalhost root#./1-2,思考题:设计一个程序,要求输入一个数,如果此数大于0,显示“输入的为正数”,否则显示“输入的为负数”。,10,1.2.2 gcc编译流程,11,1.2.2 gcc编译流程,例1-3:,设计一个程序,要求输入两个整数,求和输出。通过使用gcc的参数,控制gcc的编译过程,了解gcc的编译过程,进一步认识gcc的灵活性。,步骤 1:,编辑源程序代码,rootlocalhost root#,vim 1-3.c,12,1.2.2 gcc编译流程,步骤 2:,预处理阶段,rootlocalhost root#,gcc 1-3.c o 1-3.i E,rootlocalhost root#,vim 1-3.i,步骤 3:编译阶段,rootlocalhost root#gcc 1-3.i o 1-3.s,rootlocalhost root#vim 1-3.s,步骤 4:,汇编阶段,rootlocalhost root#,gcc 1-3.s o 1-3.o c,13,1.2.2 gcc编译流程,步骤 5:,链接阶段,Linux系统把printf和scanf函数的实现,都放在了libc.so.6的库文件中。在没有参数指定时,gcc到系统默认的路径“/usr/lib”下查找,链接到libc.so.6库函数中去,这样就有了printf和scanf函数的实现部分。把程序中一些函数的实现,这是链接阶段的工作。,完成链接后,gcc就可以生成可执行程序文件,注意:gcc在编译的时候默认使用动态链接库,编译链接时并不把库文件的代码加入到可执行文件中,而是在程序执行的时候动态加载链接库,这样可以节省系统开销。,14,1.2.2 gcc编译流程,scanf函数说明,15,1.2.3 gcc编译器的主要参数,1.总体参数,当头文件与gcc不在同一目录下要用-I dir编译,它是指头文件,而添加库文件时需用-L dir参数。,16,1.2.3 gcc编译器的主要参数,例1-4:,设计一个程序,要求把输入的字符串原样输出,程序中的头文件自己定义,源程序文件为“1-4.c”,自定义的头文件为“my.h”,放在目录“/root”下。,步骤 1:,设计编辑源程序代码1-4.c,rootlocalhost root#,vim 1-4.c,17,1.2.3 gcc编译器的主要参数,步骤 2:,设计编辑自定义的头文件my.h,rootlocalhost root#,vim my.h,步骤 3:,正常编译1-4.c文件:,rootlocalhost root#,gcc 1-4.c o 1-4,编译器提示出错。,步骤 4:,加“-I dir”参数编译:,rootlocalhost root#,gcc 1-4.c o 1-4 I /root,注意:在include语句中,“”表示在默认路径“/usr/include”中搜索头文件,引号“,”,”,”表示在本目录中搜索。因此,前面例子中把1-3.c中的“#include”改成“#include,“,my.h,”,”,就不需要“-I dir”参数也能正确编译了。,18,1.2.3 gcc编译器的主要参数,getchar函数说明,putchar函数说明,思考题:此例能不能用前面的printf函数和scanf函数?如果可以,要如何改写程序?,19,1.2.3 gcc编译器的主要参数,例1-5:,有程序1-5.c用到目录“/root/lib”下的一个动态库libsunq.so。,rootlocalhost root#,gcc 1-5.c o 1-5.c L/root/lib lsunq,Linux下的库文件命名时有一个规定:必须以l、i、b三个字母开头,因此,在用“-l”指定链接库文件时可以省去l、i、b三个字母。也就是说“-llibsunq”有时候写成“-lsunq”。,20,1.2.3 gcc编译器的主要参数,例1-6:,设计一个程序,要求把输入的数字作为X轴坐标,算出它的sin值。,步骤 1:,编辑源程序代码,rootlocalhost root#,vim 1-6.c,21,1.2.3 gcc编译器的主要参数,步骤 2:,用gcc编译程序,rootlocalhost root#,gcc 1-6.c o 1-6,结果发现编译器报错:,原因是需要指定函数的具体路径,要查找函数sin,输入:,rootlocalhost root#,nm-o/lib/*.so|grep sin,22,1.2.3 gcc编译器的主要参数,在/lib/libm-2.3.2.so:00008610 W sin中除去函数库头lib及函数的版本号-2.3.2,所余下的符号为“m”,在编译时用字符“l”与余下的符号“m”相连接成“lm”,在编译时加上此参数就能正确地通过编译,即:,rootlocalhost root#,gcc 1-6.c o 1-6 -lm,步骤 3:,运行程序,rootlocalhost root#,./1-6,注意:Linux下动态链接库默认后缀名“.so”,静态链接库默认后缀名“.a”。,23,1.2.3 gcc编译器的主要参数,gcc的常用告警和出错参数,24,1.2.3 gcc编译器的主要参数,例1-7:,设计一个程序,要求打印“这是一段用于测试的垃圾程序!”,里面包含一些非标准语法。,步骤 1:,设计编辑源程序代码,rootlocalhost root#,vim 1-7.c,25,1.2.3 gcc编译器的主要参数,步骤 2:,关闭所有告警,rootlocalhost root#,gcc 1-7.c o 1-7 w,步骤 3:,显示不符合ANSI c标准语法的告警信息,rootlocalhost root#,gcc 1-7.c o 1-7 ansi,步骤 4:,允许发出ANSI c标准所列的全部警告信息,rootlocalhost root#,gcc 1-7.c o 1-7 pedantic,步骤 5:,允许发出gcc提供的所有有用的告警信息,rootlocalhost root#,gcc 1-7.c o 1-7 Wall,26,1.2.3 gcc编译器的主要参数,优化参数,代码优化指的是编译器通过分析源代码,找出其中尚未达到最优的部分,然后对其重新进行组合,目的是改善程序的执行性能。,gcc提供的代码优化功能非常强大,它通过编译参数“-On”来控制优化代码的生成,其中n是一个代表优化级别的整数。,通常来说,数字越大优化的等级越高,同时也就意味着程序的运行速度越快。,27,1.2.3 gcc编译器的主要参数,例1-8:,设计一个程序,要求循环8亿次左右,每次都有一些可以优化的加减乘除运算。比较gcc的编译参数“-On”优化程序前后的运行速度。,步骤 1:,编辑源程序代码:,28,1.2.3 gcc编译器的主要参数,步骤 2:,不加任何优化参数进行编译。,rootlocalhost root#,gcc 1-8.c o 1-8,步骤 3:用time命令大致统计出该程序在运行时所需要的时间。,rootlocalhost root#time ./1-8,步骤 4:加“-O2”优化参数进行编译。,rootlocalhost root#gcc 1-8.c o 1-8 O2,步骤 5:再统计优化后的程序运行时所需要的时间。,rootlocalhost root#time ./1-8,步骤 6:,对比两次执行的输出结果。,29,1.2.3 gcc编译器的主要参数,优化虽然能够给程序带来更好的执行性能,但在一些场合中应该避免优化代码。,程序开发的时候。,资源受限的时候。,跟踪调试的时候。,30,1.3 gdb调试器,1.,gdb概述,Linux下的gdb调试器,是一款GNU组织开发并发布的UNIX/Linux下的程序调试工具。它没有图形化的友好界面,但功能强大。,在进行应用程序的调试之前,要注意的是gdb进行调试的是可执行文件,而不是如“.c”这样的源代码文件。因此,需要先通过gcc编译生成可执行文件才能用gdb进行调试。,31,1.3 gdb调试器,2.使用gdb调试程序,例1-9:设计一个程序,要求输入两个整数,判断并输出其中的最小数。,步骤 1:编辑源程序代码:,32,1.3 gdb调试器,步骤 2:,用gcc编译程序,rootlocalhost root#,gcc 1-9.c o 1-9,g,步骤 3:,进入gdb调试环境,rootlocalhost root#,gdb,1-9,注意:gdb是命令行调试环境,调试程序都在提示符“(gdb)”后输入相应的命令,gdb的命令很多,可以在提示符“(gdb)”后输入help进行查找。,常用的gdb命令,33,1.3 gdb调试器,步骤 4:,用gdb调试程序,(1)查看源文件,在gdb中输入“l”(list)就可以查看程序源代码,一次显示10行;,注意:gdb命令“l”(list)列出源代码的
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!