- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
gcc一切从这里开始
GCC——一切从这里开始 2005.05.20 来自:CSDN 作者:Lorne Bailey 摘要: 要想读懂本文,你需要对C语言有基本的了解,本文将介绍如何使用gcc编译器。 首先,我们介绍如何在命令行方式下使用编译器编译简单的C源代码。然后,我 们简要介绍一下编译器究竟作了那些工作,以及如何控制编译过程。我们也简要 介绍了调试器的使用方法。 GCC rules 你能想象使用封闭源代码的私有编译器编译自由软件吗?你怎么知道编译器在你 的可执行文件中加入了什么?可能会加入各种后门和木马。Ken Thompson是一个 著名的黑客,他编写了一个编译器,当编译器编译自己时,就在login程序中 留下后门和永久的木马。幸运的是,我们有了gcc。当你进行 configure;make; make install 时,gcc在幕后做了很多繁重的工作。如何才能让gcc为我们工作 呢?我们将开始编写一个纸牌游戏,不过我们只是为了演示编译器的功能,所以 尽可能地精简了代码。我们将从头开始一步一步地做,以便理解编译过程,了解 为了制作可执行文件需要做些什么,按什么顺序做。我们将看看如何编译C程序 ,以及如何使用编译选项让gcc按照我们的要求工作。步骤 (以及所用工具)如 下:预编译 (gcc -E), 编译 (gcc), 汇编 (as),和 连接 (ld)。 开始... 首先,我们应该知道如何调用编译器。实际上,这很简单。我们将从那个著名的 第一个C程序开始。 (各位老前辈,请原谅我)。 #include stdio.h int main() { printf(Hello World!\n); } 把这个文件保存为 game.c。 你可以在命令行下编译它: gcc game.c 在默认情况下,C编译器将生成一个名为 a.out 的可执行文件。你可以键入如下 命令运行它: a.out Hello World 每一次编译程序时,新的 a.out 将覆盖原来的程序。你无法知道是哪个程序创 建了a.out。我们可以通过使用 -o 编译选项,告诉 gcc我们想把可执行文件叫 什么名字。我们将把这个程序叫做 game,我们可以使用任何名字,因为C没有Java那样的命名限制。 gcc -o game game.c game Hello World 到现在为止,我们离一个有用的程序还差得很远。如果你觉得沮丧,你可以想一 想我们已经编译并运行了一个程序。因为我们将一点一点为这个程序添加功能, 所以我们必须保证让它能够运行。似乎每个刚开始学编程的程序员都想一下子编 一个1000行的程序,然后一次修改所有的错误。没有人,我是说没有人,能做到 这个。你应该先编一个可以运行的小程序,修改它,然后再次让它运行。这可以 限制你一次修改的错误数量。另外,你知道刚才做了哪些修改使程序无法运行, 因此你知道应该把注意力放在哪里。这可以防止这样的情况出现:你认为你编写 的东西应该能够工作,它也能通过编译,但它就是不能运行。请切记,能够通过 编译的程序并不意味着它是正确的。 下一步为我们的游戏编写一个头文件。头文件把数据类型和函数声明集中到了一 处。这可以保证数据结构定义的一致性,以便程序的每一部分都能以同样的方式 看待一切事情。 #ifndef DECK_H #define DECK_H #define DECKSIZE 52 typedef struct deck_t { int card[DECKSIZE]; /* number of cards used */ int dealt; }deck_t; #endif /* DECK_H */ 把这个文件保存为 deck.h。只能编译 .c 文件,所以我们必须修改 game.c。在 game.c的第2行,写上 #include deck.h。在第5行写上 deck_t deck;。为了 保证我们没有搞错,把它重新编译一次。 gcc -o game game.c 如果没有错误,就没有问题。如果编译不能通过,那么就修改它直到能通过为止 。 预编译 编译器是怎么知道 deck_t 类型是什么的呢?因为在预编译期间,它实际上把deck.h文件复制到了game. c文件中。源代码中的预编译指示以#为前缀。你可以通过在gcc后加上 -E 选 项来调用预编译器。 gcc -E -o game_precompile.txt game.c wc -l game_precompile.txt 3199 game_preco
您可能关注的文档
最近下载
- 专题03 阅读填空20篇(中考真题+各区名校模拟)2023年广州中考英语冲刺专项训练(解析版).docx VIP
- 产品结构设计课作业.doc VIP
- 临床药物治疗学模拟考试题+答案.docx VIP
- 临床药物治疗学考试题与答案.docx VIP
- 霸碗 盖码饭 智能炒菜机器人 品牌手册(2023Q4版).pdf
- 临床药物治疗学考试题+答案.docx VIP
- 人教版小学三年级体育教案全集全册.doc VIP
- 2011-2016年淮北师范大学《分析化学》考研真题汇总.pdf VIP
- 2011-2016年淮北师范大学《无机化学》考研真题汇总.pdf VIP
- 《小型悬臂起重机结构设计计算》18000字.docx
文档评论(0)