0
点赞
收藏
分享

微信扫一扫

基于springboot框架的电脑商城项目(六)

悄然丝语 2023-05-22 阅读 84

文章目录


在这里插入图片描述

程序的翻译环境和执行环境

翻译环境

编译

如图:

在这里插入图片描述

先写一段代码 :

#include<stdio.h>

int main()
{
	printf("hehe\n");
	return 0;
}

运行后, 查看 .exe 文件 ,.exe 其实就是可执行程序

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

预编译

  • 将所有的“#define”删除,并且展开所有的宏定义。

  • 处理所有条件预编译指令,比如“#if”、“#ifdef”、“#elif”、“#else”、“#endif”。

  • 处理“#include”预编译指令,将被包含的文件插入到该预编译指令的位置。注意,这个过程是递归进行的,也就是说被包含的文件可能还包含其他文件。

  • 删除所有的注释“//”和“/**/”。

  • 添加行号和文件名标识,比如#2“hello.c”2,以便于编译时编译器产生调试用的行号信息及用于编译时产生编译错误或警告时能够显示行号。

  • 保留所有的#pragma编译器指令,因为编译器须要使用它们。

经过预编译后的.i文件不包含任何宏定义,因为所有的宏已经被展开,并且包含的文件
也已经被插入到.i文件中。所以当我们无法判断宏定义是否正确或头文件包含是否正确时,可以查看预编译后的文件来确定问题。

在预编译这个环节,我们主要剖析三个部分 : 头文件的包含 、删除注释 、替换#define定义的符号

头文件的包含

test.c 文件里面有#include"test.h" ,#include"test.h" 的作用是将test.h的文件拷贝一份放到 test.i中

在这里插入图片描述

删除注释

替换#define定义的符号

预编译阶段做的3件事,实际上都是一些文本操作,并没有运行该代码

编译

在这里插入图片描述

词法分析

比如我们有一行C语言的源代码如下:

array[index] = (index+4)*(2+6)

在这里插入图片描述

语法分析

在这里插入图片描述

语义分析

比如C语言里面两个指针做乘法运算是没有意义的,但是这个语句在语法上是合法的;比如同样一个指针和一个浮点数做乘法运算是否合法等。

在这里插入图片描述

符号汇总

在这里插入图片描述

汇编

在这里插入图片描述

在这里插入图片描述

链接

合并段表

(vs生成的目标文件的后缀是.obj , gcc生成的目标文件后缀是.o)

在这里插入图片描述

符号表的合并和重定位

比如我们在第1条指令之后、第5条指令之前插入了一条或多条指令,那么第5条指令及后面的指令的位置将会相应地往后移动,原先第一条指令的低4位的数字将需要相应地调整。

在这里插入图片描述

执行环境

exe程序执行的过程大概可以分为四个步骤:

程序首先要载入内存中。 在有操作系统的环境中,该操作一般由操作系统来完成。在独立的环境中,程序的载入可以由手工完成,也可以通过可执行代码置入只读内存来完成。
程序的执行开始。 接着便调用main函数。
开始执行程序代码。 这个时候程序将使用一个运行时堆栈(stack),存储函数的局部变量和返回地址。程序同时也可以使用静态(static)内存,存储于静态内存中的变量在程序的整个执行过程一直保留它们的值。
终止程序。 正常终止main函数,也可能是意外终止。

如果你觉得这篇文章对你有帮助,不妨动动手指给点赞收藏加转发,给鄃鳕一个大大的关注
你们的每一次支持都将转化为我前进的动力!!!

举报

相关推荐

0 条评论