Linux程序设计——技术技巧和项目实践---C程序设计技术--第5章.pptVIP

Linux程序设计——技术技巧和项目实践---C程序设计技术--第5章.ppt

  1. 1、本文档共83页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux程序设计——技术技巧和项目实践---C程序设计技术--第5章

第五章 C程序设计技术;5.1 管中窥豹学习C编程;从最基本的 hello world 程序设计起步;2.编译链接和运行程序 $ gcc helloworld.c –o helloworld $ ./helloworld //./用于指明执行程序的路径 Hello World. //程序运行结果。过程如图5.1所示。 这样在linux平台上的简单C程序的开发与运行工作就完成了。 ;5.2 gcc编译器应用解析;5.2.2 gcc编译选项;5.2.3 gcc编译过程与游戏编程;如何让gcc为读者服务呢?;引导读者编写一个纸牌游戏;本文件保存为deck.h。为了让头文件起作用,要把它加入到主程序之中。可以在game.c的第2行用#include deck.h调用这个头文件。在第5行写上deck_t deck;,则game程序的主程序game.c代码如下: #include stdio.h #include deck.h int main() { deck_t deck; shuffle(deck); /*洗牌函数,后面将详细介绍*/ printf(Hello World!\n); };解析本程序从预编译到运行结果的全过程;2.编译 作为一个中间步骤,gcc把所有代码翻译成汇编语言,通过分析代码了解编程的目的。如果有语法错误,就在屏幕上显示出来,这样编译就失败了。有时这一步被误解为整个过程。实际上这只是冰山一角。 3.汇编 as把汇编代码转换为目标代码。事实上目标代码并不能在CPU上运行。编译器选项 -c 把 *.c 文件转换为以 *.o的目标文件。 如果读者运行 gcc -c game.c就自动生成名为game.o的文件。 下面继续编写游戏代码。我们把一付牌定义为deck_t,则读者要写一个洗牌函数。这个函数接受一个指向deck类型的指针,并把一付随机的牌装入deck类型。它用drawn数组跟踪记录那些已经用过的牌。这个具有DECKSIZE个元素的数组可以防止读者重复使用同一张牌。 ;呜局族虚寺洞相空音贵频片湿退典槛班蜂翔沂劳视妥服藏维板加备郁泵牲Linux程序设计——技术技巧和项目实践---C程序设计技术--第5章Linux程序设计——技术技巧和项目实践---C程序设计技术--第5章;把这个文件保存为shuffle.c。在这个代码中加入了一条调试语句,以便运行时,能输出产生的牌号。因为游戏还在初级阶段,没有别的办法确定函数是否实现了读者要求的功能。使用一条printf语句,就能准确地知道现在究竟发生了什么,以便在开始下一阶段之前我们知道牌已经洗好了。这种调试技术看起来很简单,但它用最少的语句完成了调试任务。 注意两个问题:一是读者用值传递方式传递参数,把变量的机器地址传递给了函数,因此函数自己就能改变变量的值。也可以使用全局变量,尽量少用。 读者在一个新的 *.c文件中用函数调用。操作系统总是寻找名为main的函数,并从那里开始执行。 shuffle.c中没有main函数,因此不能编译为独立的可执行文件。读者必须把它与另一个具有main函数并调用shuffle的程序组合起来。 运行命令: #gcc -c shuffle.c 编辑game.c文件,在第7行,在 deck_t类型的变量deck声明之后,加上下面这一行: shuffle(deck);;现在,如果读者象以前一样创建可执行文件,就会出现一个错误: #gcc -o game game.c /tmp/ccmiHnJX.o: In function `main: /tmp/ccmiHnJX.o(.text+0xf): undefined reference to `shuffle collect2: ld returned 1 exit status 为什么有这样的错误呢?因为编译器不知道shuffle函数在哪里。下面就说明如何告诉编译器找到这个函数。;4.连接;5.两个重要选项;6.调试;5.3 gdb调试技术;5.3.1 调试编译与选项;gdb的命令可以使用help命令查看;5.3.2 程序调试设置;5.3.3 在线调试过程;注意程序源码里不包含左侧的序号,去掉序号后编译生成执行文件。 yuym/test gcc -g sumpro.c -o sumpro 使用gdb调试: yuym/test gdb sumpro ------ 启动gdb GNU gdb Red Hat Linux (5.3post-018rh) Copyright 2003 Free Software Foundation, Inc. GDB is free software, covered by the

文档评论(0)

yan698698 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档