




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
7.1编译与预处理1、 预处理:是指在进行编译之前所作的处理,由预处理程序负责完成 。2、宏:用一个标识符来表示一个字符串,称为“宏”,被定义为“宏”的标识符称为“宏名”。 3、宏替换:在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这称为“宏代换”或“宏展开”;4、Vs2013运行预处理与编译代码: 7.1.2HelloWorld案例拓展Hello,World这样简单的示例程序,都要经过编辑、预处理、编译、链接4个步骤,才能变成可执行程序,鼠标双击就弹出命令窗口,显示“Hello,World”。这也是一般C语言程序的编译流程,如所示。7.1.3编辑编辑可能就是通常所说的“写代码”,用集成开发工具也好,用记事本也好,按C语言的语法规则组织一系列的源文件,主要有两种形式,一种是.c文件,另一种是.h文件,也称头文件。7.1.4预处理“#include”和“#define”都属于编译预处理,C语言允许在程序中用预处理指令写一些命令行。预处理器在编译器之前根据指令更改程序文本。编译器看到的是预处理器修改过的代码文本,C语言的编译预处理功能主要包括宏定义、文件包含和条件编译3种。预处理器对宏进行替换,并将所包含的头文件整体插入源文件中,为后面要进行的编译做好准备。下面是一个包含头文件的例子,请看 (1)举例:下面是一个头文件,p.txt(2)包含该头文件,并执行代码如下:(3)执行后的结果如下:7.1.5编译编译器处理的对象是由单个c文件和其中递归包含的头文件组成的编译单元,一般来说,头文件是不直接参加编译的。编译器会将每个编译单元翻译成同名的二进制代码文件,在DOS和Windows环境下,二进制代码文件的后缀名为.obj,在Unix环境下,其后缀名为.o,此时,二进制代码文件是零散的,还不是可执行二进制文件。了解编译过程:编译:在文件资源管理中查看:编译过程示例如下:在linux下编译链接过程:(1) 源代码如下(2)生成run.o文件(3) 生成可执行文件生成run.out(4) 执行run.out。结果如下编译后不能直接执行。上述问题解决办法是实现go()函数可执行,其结果如下7.1.5编译编译器处理的对象是由单个c文件和其中递归包含的头文件组成的编译单元,一般来说,头文件是不直接参加编译的。编译器会将每个编译单元翻译成同名的二进制代码文件,在DOS和Windows环境下,二进制代码文件的后缀名为.obj,在Unix环境下,其后缀名为.o,此时,二进制代码文件是零散的,还不是可执行二进制文件。错误检查大多是在编译阶段进行的,编译器主要进行语法分析,词法分析,产生目标代码并进行代码优化等处理。为全局变量和静态变量等分配内存,并检查函数是否已定义,如没有定义,是否有函数声明。函数声明通知编译器:该函数在本文件晚些时候定义,或者是在其他文件中定义。在vs2013工程中如何查看编译器:总结:7.1.6链接链接器将编译得到的零散的二进制代码文件组合成二进制可执行文件,主要完成下述两个工作,一是解析其他文件中函数引用或其他引用,二是解析库函数。 7.1.7程序错误编译链接,一大堆的错误提示,没有完美的程序,不存在没有缺陷的程序,如果一个程序运行很完美,那是因为它的缺陷到现在还没有被发现。同样,软件测试是为了发现程序中可能存在的问题,而不是证明程序没有错误。7.1.8错误分类错误可分两大类,一是程序书写形式在某些方面不合C语言要求,称为语法错误,这种错误将会由编译器指明,是种比较容易修改的错误,二是程序书写本身没错,编译链接能够完成,但输出结果与预期不符,或着执行着便崩溃掉,称为逻辑错误。语法错误又可分为编译错误和链接错误,很明显,编译错误就是在程序编译阶段出的错误,而链接错误就是在程序链接阶段出的问题。示例:排错过程 少写了分号时如下:逻辑错误,运行(读取错误)示例:7.1.9编译错误如果文件中出现编译错误,编译器将给出错误信息,并指明错误所在的行,提示用户修改代码,编译错误主要有两类:(1)语法问题,缺少符号,如缺分号,缺括号等,符号拼写不正确,一般来说,编译器都会指明错误所在行,但由于代码是彼此联系的,有时编译器给出的信息未必正确。(2)上下文关系有误,程序设计中有很多彼此关联的东西,比如变量要先创建再使用,有时编译器会发现某个变量尚未定义,便会提示出错。除了错误外,编译器还会对程序中一些不合理的用法进行警告(warning),尽管警告不耽误程序编译链接,但对警告信息不能掉以轻心,警告常常预示着隐藏很深的错误,特别是逻辑错误,应当仔细排查。错误示例:(分号写成逗号)上下文联系错误(未声明的标识符):运行错误(访问野指针)7.1.10链接错误当一个编译单元中调用了库函数或定义在其他编译单元中的函数时,在链接阶段就需要从库文件或其他目标文件中抽取该函数的二进制代码,以便进行组合等一系列工作,找不到函数定义时,链接器无法找到该函数对应的代码,便会提示出错,指出名字未解析。一般来说,链接器给出的错误提示信息是关乎函数的链接。代码示例链接错误:出现错误是由于缺少z的变量定义,加上下面这个文件就可以了7.1.11逻辑错误程序顺利通过了编译链接,可要检查生成的可执行程序,看其是否实现了所需的功能。实际上,运行阶段出现的逻辑错误更难排查,编译错误和链接错误好歹有提示信息,但面对逻辑错误,就像浑水摸鱼。可能出现的逻辑错误有以下情况:(1)、与操作系统有关的操作,是否进行了非法操作,如非法内存访问等。错误示例:可以编译连接运行错误,但是执行结果与想象的不一样,这是因为多了一个分号,逻辑错误。错误示例:把1234作为地址,当读取*p时实际读取的1234地址的数据,此时非法访问,出现错误。 (2) 、是否出现了死循环,表现为长时间无反应,假死,注意,长时间无反应并不一定都是死循环,有的程序确实需要很长时间,这种情况要仔细分析。例:(3) 、程序执行期间发生了一些异常,比如除数为0等,操作无法继续进行。错误提示:(4)、程序能正确执行,但结果不对,此时应检查代码的编写是否合乎问题规范。7.1.12排错排除错误,有两层含义,找到出错的代码,修改该代码。排错也有两种形式,一是静态排错,另一种是动态排错。如果还是不行,就要使用动态检查机制,最基本的方法是“分而治
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 城市公用事业投资及管理合同
- 农村环境改造及绿化合作协议
- 建筑工程项目经验证明书(6篇)
- 菊花种苗购销协议
- 股东合作框架下的出资证明书(8篇)
- 2025年北京市海淀区高考地理一模试卷
- 无人驾驶汽车路测与数据分析协议
- 施工过程中的文档管理技巧试题及答案
- 行政管理学的全球视野与本土实践的结合及试题及答案
- 农业技术推广资金互助合同
- 煤炭产品质量保障措施
- 2025福建中考:数学必背知识点
- 自愿离婚协议书电子版
- 2025年广东省汕头市澄海区中考一模数学试题(含答案)
- 高考英语必背688个高频词汇清单
- 浙江开放大学2025年《社会保障学》形考任务1答案
- 基于深度学习的西北地区沙尘天气级联预测模型研究
- 《危险化学品企业安全生产标准化规范》专业深度解读与应用培训指导材料之2:5管理要求-5.1 安全领导力(雷泽佳编制-2025A0)
- 《医疗素养提升》课件
- 2025年人教版(2024)小学数学一年级下册期中考试测试卷附参考答案
- 统编版二年级语文下册第五单元自测卷(含答案)
评论
0/150
提交评论