简述将源程序编译成可执行程序的过程

简述将源程序编译成可执行程序的过程,第1张

一个源程序到一个可执行程序的过程:预编译、编译、汇编、链接。其中,编译是主要部分,其中又分为六个部分:词法分析、语法分析、语义分析、中间代码生成、目标代码生成和优化。

预编译:主要处理源代码文件中的以“#”开头的预编译指令。处理规则如下:

1、删除所有的#define,展开所有的宏定义。

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

3、处理“#include”预编译指令,将文件内容替换到它的位置,这个过程是递归进行的,文件中包含其他文件。

4、删除所有的注释,“//”和“/**/”。

5、保留所有的#pragma 编译器指令,编译器需要用到他们,如:#pragma once 是为了防止有文件被重复引用。

6、添加行号和文件标识,便于编译时编译器产生调试用的行号信息,和编译时产生编译错误或警告是能够显示行号。

扩展资料:

编译过程中语法分析器只是完成了对表达式语法层面的分析,语义分析器则对表达式是否有意义进行判断,其分析的语义是静态语义——在编译期能分期的语义,相对应的动态语义是在运行期才能确定的语义。

其中,静态语义通常包括:声明和类型的匹配,类型的转换,那么语义分析就会对这些方面进行检查,例如将一个int型赋值给int*型时,语义分析程序会发现这个类型不匹配,编译器就会报错。

一个编译生成的可执行程序,使用gobuild命令执行。根据查询相关公开信息显示,一个编译生成的可执行程序要对它们进行编译,并最终生成可执行程序test,可以使用下面这条命令:gobuild,同时处理的文件不止一个。

举个例子,下列程序保存在C2E1.cpp中

现在想执行它。有两种方法。

a. 运行下列语句,该程序会被编译成可执行文件。

b. 可以看到存放该程序的文件夹生成了一个a.out。接着运行

可以看到结果被输出。

这种方法因为每次生成的可执行文件都叫a.out,很容易被覆盖。第二种方法就是给可执行文件取一个专用名,易于区分。

a. 运行

b. 运行

就能输出结果

其中options就是编译器所需要的参数,filenames给出相关的文件名称。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7938453.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-11
下一篇2023-04-11

发表评论

登录后才能评论

评论列表(0条)

    保存