linux下的c编程.ppt

上传人:laozhun 文档编号:2673643 上传时间:2023-02-22 格式:PPT 页数:29 大小:460KB
返回 下载 相关 举报
linux下的c编程.ppt_第1页
第1页 / 共29页
linux下的c编程.ppt_第2页
第2页 / 共29页
linux下的c编程.ppt_第3页
第3页 / 共29页
linux下的c编程.ppt_第4页
第4页 / 共29页
linux下的c编程.ppt_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《linux下的c编程.ppt》由会员分享,可在线阅读,更多相关《linux下的c编程.ppt(29页珍藏版)》请在三一办公上搜索。

1、1,Linux下的C程序编程,2,主要内容,GCC编译器,GDB调试器,3,一、GCC编译器 1、GCC是什么,GCC(GNU C Complier)是符合ANSI C标准的多平台编译器。GCC通过后缀来区别输入文件的类型,集成C、C+、JAVA等多种语言编译器。cC语言源代码文件。h程序所包含的头文件。o编译后的目标文件。i 已经预处理过的C源代码文件。s汇编语言源代码文件。S经过预编译的汇编语言源代码文件。C、cpp、.cc或.cxx C+源代码文件。ii己经预处理过的C+源代码文件。a由目标文件构成的档案库文件。,通过文件后缀来判断文件类型,通过权限来判断文件是否可以运行,4,2、GCC

2、工作流程,5,起步演示helloworldhello.c#include int main(void)printf(“hello world!n”);return 0;编译运行这段程序:gcc hello.c o hello./hello输出:hello world!,6,3、基本使用,基本用法:gcc options filenames options:编译器所需要的编译选项 filename:要编译的文件名 GCC有超过100个的编译选项。选项的合理使用对编译调试程序有很大作用。只介绍其中最基本、最常用的参数-o output_filename:确定可执行文件的名称为output_file

3、name.如果不给出这个选项,gcc就给出预设的可执行文件a.out,7,-c 进行预处理、编译,产生目标代码,不连接成为可执行文件。编译器只是由输入的.c等源代码文件生成.o为后缀的的文件(一般应用程序开发用不到,内核开发中可以用到),-g 产生符号调试工具(GNU的GDB)所必要的符号信息,要想对源代码进行调试,必须加入这个选项。,-O 告诉gcc进行基本优化,整个源代码会在编译、连接过程中进行优化处理-O2 产生尽可能小、快的代码,比-O跟好的优化编译、连接,8,#include int main(void)double counter;double result;double temp

4、;for(counter=0;counter2000.0*2000.0*2000.0/20.0+2020;counter+=(5-1)/4)temp=counter/1979;result=counter;printf(“result is%lfn”,result);return 0;,9,gcc optimize.c o optimizetime./optimizegcc O optimize.c o optimize time./optimize 对比两次执行的输出结果不难看出,程序的性能的确的到了很大幅度的改善,10,-w 关闭所有警告,建议不要使用此项-Wall 允许发出gcc能提供的

5、所有有用的警告,也可以用-W(warning)来标记指定的警告,11,12,多个文件的编译,vi main.c#include void chessboard();void stair();main()chessboard();stair();,vi chessboard.c#include void chessboard()int i,j;for(i=0;i8;i+)for(j=0;j8;j+)if(i+j)%2=0)printf(%c%c,0 xa1,0 xf6);else printf();printf(n);printf(n);,vi stair.c#include void stai

6、r()int i,j;for(i=1;i11;i+)for(j=1;j=i;j+)printf(%c%c,0 xa1,0 xf6);printf(n);printf(n);,gcc main.c chessboard.c stair.c o prngrap,13,常见错误,语法错误:错误信息:文件source.c中第 n 行有语法错误(syntex error)。头文件错误错误信息:找不到头文件head.h(can not find include file head.h)。函数库错误错误信息:链接程序找不到所需的函数库。如:ld:-lm:No such file or directory,1

7、4,二、GDB调试器,1、GDB介绍GDB调试器主要用于调试可执行文件,这个文件必须提供调试版本,包含调试信息。所以,编译程序时一定用调试选项使生成的可执行文件内包含调试信息,常用-g。调试信息包含程序里每个变量的类型和在可执行文件里的地址映射及行号。主要功能:监视程序中变量的值设置断点逐行执行代码,15,起步调试test.c,void main()int i;long result=0;for(i=1;i=100;i+)result+=i;printf(result=%dn,result);,16,GDB快速进阶1、编译生成可执行文件 gcc g test.c o test2、启动GDB g

8、db test3、在main函数处设置断点 break main4、运行 run5、单步运行 next6、继续运行 continue,17,2、启动GDB 1)gdb 调试程序名 举例:gdb helloworld 2)gdb file 调试程序名,18,3、GDB基本命令,list(l)查看程序break(b)函数名 在函数入口处设置断点break(b)行号 在指定行添加断点break(b)文件名:行号 在制定文件名的制定行添加断点,19,20,2、使用举例:调试一个计算150和1100累加值的程序。,21,#include int sum(int n);main()int i,result

9、=0;for(i=1;i=50;i+)result+=i;printf(result1-50=%dn,result);printf(result1-100=%dn,sum(100);int sum(int n)int i,sum;for(i=1;i=n;i+)sum+=i;return sum;,22,编译:gcc tst.c o tst运行:./tstgcc编译时无报错,表明编译通过。但运行tst时,第一行结果result1-50=1275是正确的,第二行结果result1-100=14160814与预想不符,23,(3)调试输入命令:gcc-g tst.c-o tst启动调试:gdb ts

10、t在gdb下进行调试过程用到许多基本gdb命令,一般都只写首字母即可。键入“l”(list)查看gdb载入文件tstsm的源代码。按回车则重复上一次操作。,24,在第18行设置断点,键入”info b”查看设置断点的情况;输入命令“d 断点号”删除(delete)断点,GDB中键入“r”(run),程序从首行运行到断点前一句,在断点处暂停。,25,在GDB中键入“p(print)变量名”命令查看断点处的相关变量值,在gdb中输入命令“n”(next),采用单步运行方式继续往下执行程序,在gdb中输入命令“c”(continue)把剩余还未执行的程序执行完键入“q”(quit),退出GDB调试,

11、返回终端的系统提示符。,本例子错误在sum函数中未对sum变量初始化。,26,关于watch 变量注意,watch设置的观察点当值有改变时才会有输出。有时对断点的变量设置了观察点,但是c(continue),n(ext)使用的不适当会看不到变量值的变化效果。某个求字符串反序的程序中的一段代码for(i=0;isize;i+)str2size-i=str1i;(a)str2size+1=0;(b)gdb调试时,在a处设置断点,run后停在a处,设置对变量的观察点watch str2size-i。然后按n一步步执行,看不到值的变化,按c才能看到效果。,27,4、GDB的help命令,直接输入hel

12、p,可查看到GDB命令种类查看某个类中的各种命令。如上步中列出的种类data查看某个命令,(gdb)helpList of classes of commands:aliases-Aliases of other commandsbreakpoints-Making program stop at certain pointsdata-Examining datafiles-Specifying and examining filesinternals-Maintenance commandsType help followed by a class name for a list of co

13、mmands in that class.Type help followed by command name for full documentation.Command name abbreViations are allowed if unambiguous.,(gdb)help dataExamining data.List of commands:call-Call a function in the programdelete display-Cancel some expressions to be displayed when program stopsdelete mem-D

14、elete memory regiondisable display-Disable some expressions to be displayed when program stopsType help followed by command name for full documentation.Command name abbreViations are allowed if unambiguous.,查找call命令:help call。(gdb)help callCall a function in the program.The argument is the function

15、name and arguments,in the notation of thecurrent working language.The result is printed and saved in the valuehistory,if it is not void.,28,实验几个简单C程序。课本及实验教材中陆续会出现各种C程序。均可作实验。出现的函数很多是各种功能的linux系统调用,注意多积累对系统调用的认识。,29,想实现某个功能,却不知道用哪个函数?查手册Linux函数库参考手册(适合不知道什么功能该用什么函数,以及函数的具体使用)man(适合知道函数名后查具体使用)积累多读、多做vi中在函数名处按shift+k可看到函数说明信息,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号