随笔分类 -  第八章:从源文件到可执行文件

摘要:Q:编译器和解释器有什么不同?A:编译器是在运行前对所有源代码进行解释处理的。而解释器则是在运行时对源代码的内容一行一行地进行解释处理的。Q:“分割编译”指的是什么?A:将整个程序分为多个源代码来编写,然后分别进行编译,最后链接成一个EXE文件。这样每个源代码都相对变短,便于程序管理。Q:“Buil 阅读全文
posted @ 2023-02-07 09:20 濒临物种仙女 阅读(16) 评论(0) 推荐(0) 编辑
摘要:EXE文件的内容分为再配置信息、变量组和函数组,这一点想必大家都清楚了吧。不过,当程序加载到内存后,除此之外还会额外生成两个组,那就是栈和堆。栈是用来存储函数内部临时使用的变量(局部变量),以及函数调用时所用的参数的内存区域。堆是用来存储程序运行时的任意数据及对象的内存领域(图8-10)。 EXE文 阅读全文
posted @ 2023-02-07 09:18 濒临物种仙女 阅读(19) 评论(0) 推荐(0) 编辑
摘要:在程序运行时,虚拟的内存地址会转换成实际的内存地址。链接器会在EXE文件的开头,追加转换内存地址所需的必要信息。这个信息称为再配置信息。EXE文件的再配置信息,就成为了变量和函数的相对地址。相对地址表示的是相对于基点地址的偏移量,也就是相对距离。实现相对地址,也是需要花费一番心思的。在源代码中,虽然 阅读全文
posted @ 2023-02-07 09:10 濒临物种仙女 阅读(9) 评论(0) 推荐(0) 编辑
摘要:Windows以函数的形式为应用提供了各种功能。这些形式的函数称为API (应用程序接口)。例如,Samplel.c中调用的MessageBox0,它并不是C语言的标准函数,而是Windows提供的API的一种。MessageBox()提供了显示消息框的功能。Windows中,API的目标文件,并不 阅读全文
posted @ 2023-02-07 09:09 濒临物种仙女 阅读(12) 评论(0) 推荐(0) 编辑
摘要:下图的错误消息表示的是无法解析Sample1.obj参照的外部符号。 外部符号是指其他目标文件中的变量或函数。sprintf及MessageBoxA是目标文件中sprintf及MessageBox()的名称。代码中记述的函数名同目标文件中的函数名有一些差异,不过大家只需把它理解成这是C编译器的规定即 阅读全文
posted @ 2023-02-07 09:06 濒临物种仙女 阅读(7) 评论(0) 推荐(0) 编辑
摘要:编译器转换源代码后,就会生成本地文件。不过,本地文件是无法直接运行的。为了得到可以运行的EXE文件,编译之后还需要进行“链接”处理。下面,就让我们使用Borland C++ Compiler5.5(以下称为Borland C++)来看一下编译和链接是如何进行的。Borland C++的编译器是bcc 阅读全文
posted @ 2023-02-07 09:04 濒临物种仙女 阅读(14) 评论(0) 推荐(0) 编辑
摘要:能够把C语言等高级编程语言编写的源代码转换成本地代码的程序称为编译器。 每个编写源代码的编程语言都需要其专用的编译器。将C语言编写的源代码转换成本地代码的编译器称为C编译器。编译器工作是首先读入代码的内容,然后再把源代码转换成本地代码。编译器中就好像有一个源代码同本地代码的对应表。但实际上,仅仅靠对 阅读全文
posted @ 2023-02-07 09:01 濒临物种仙女 阅读(31) 评论(0) 推荐(0) 编辑
摘要:用记事本打开由代码清单8-1的内容转换成本地代码得到的EXE文件(Samplel.exe),页面显示情况如下图所示: 据此我们应该可以看出,本地代码的内容是人类无法理解的。也正是因为如此,才有了用人类容易理解的C语言等编程语言来编写源代码,然后再将源代码转换成本地代码这一方法。 接下来,我们把刚才的 阅读全文
posted @ 2023-02-07 08:58 濒临物种仙女 阅读(13) 评论(0) 推荐(0) 编辑
摘要:类似于代码清单8-1这样 用某种编程语言编写的程序就称为源代码,保存源代码的文件称为源文件。用C语言编写的源文件的扩展名通常是“.c”,因此,这里我们就把代码清单8-1的文件命名为Sample1.c。 因为源文件是简单的文本文件,所以用Windows自带的记事本等文本编辑器就可以编写。 代码清单8- 阅读全文
posted @ 2023-02-07 08:55 濒临物种仙女 阅读(23) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示