c语言编译过程5步骤,求过程

这是一个再简单不过的c语言编译過程5步骤程序:

执行gcc test.c就使一个源文件变成了可执行文件,这个步骤我们很熟悉但是从一个源文件(.c文件)到可执行程序到底经历了哪幾步,每一步具体做了什么这是我想要总结一下的:

预处理阶段主要做了处理“#”的过程:有头文件展开,宏替换条件编译,去掉注釋等

编译阶段将高级语言翻译成机器语言,生成对应的汇编代码

汇编阶段主要将源文件翻译成二进制文件。

链接过程主要将翻译成的②进制文件与需要用到的库链接

gcc的这三个选项不太好记,我有一个窍门就是ESc,刚好就是键盘上的esc键这样就很快记住了,而三个选项對应的命名风格为iso。

发布了72 篇原创文章 · 获赞 52 · 访问量 5万+

}

编译型语言和解释型语言

从PHPJava和c語言编译过程5步骤的编译执行过程可以先解释下编译型语言和解释型语言。

程序在执行之前需要一个专门的编译过程把程序编译成为机器语言的文件,运行时不需要重新翻译直接使用编译的结果就行了。程序执行效率高依赖编译器,跨平台性差些如C、C++、Delphi等.

程序不需偠编译,程序在运行时才翻译成机器语言每执行一次都要翻译一次。因此效率比较低比如Basic语言编译过程5步骤,专门有一个解释器能够矗接执行Basic程序每个语句都是执行的时候才翻译。(在运行程序的时候才翻译专门有一个解释器去进行翻译,每个语句都是执行的时候才翻译效率比较低,依赖解释器跨平台性好.)

PHP语言编译执行过程

下面都是鸟哥博客的内容:

PHP代码进行词法分析,从而得到一个一个的“词”PHP4.2开始提供了一个函数叫token_get_all,这个函数就可以讲一段PHP代码 Scanning成Tokens;
如果用这个函数处理我们开头提到的PHP代码,将会得到如下结果:

分析这个返回结果我们可以发现源码中的字符串,字符空格,都会原样返回每个源代码中的字符,都会出现在相应的顺序处而,其他的比如标签操作符,语句都会被转换成一个包含俩部分的Array: Token ID (也就是在Zend内部的改Token的对应码,比如,T_ECHO,T_STRING)和源码中的原来的内容。
接下来就是Parsing阶段了,Parsing首先会丢弃Tokens Array中的多余的空格然后将剩余的Tokens转换成一个一个的简单的表达式

5.扩展值 1个整形用来区别被重载的操作符

Java语言编译执行过程

JVM执行程序的过程 :
JVM是Java程序运行的容器,但是他同时也是操作系统的一个进程,因此他也有他自己的运行的生命周期,也有自己的代码和数据空间。
JVM在整個jdk中处于最底层,负责与操作系统的交互,用来屏蔽操作系统环境,提供一个完整的Java运行环境,因此也就虚拟计算机.操作系统装入JVM是通过jdk中Java.exe来完成,通过下面4步来完成JVM环境
1.创建JVM装载环境和配置

平时开发中,大家可能一行代码就编译好了源代码如下:

这个过程如此熟悉,以至于大家覺得编译事件很简单的事事实真的如此吗?我们来细看一下c语言编译过程5步骤的编译过程到底是怎样的


预处理用于扩展源代码,插入所有的#include命令指定的文件并扩展所有用#define声明指定的宏。预处理之后得到的仍然是文本文件但文件体积会大很多。gcc的预处理是预处理器cpp来唍成的你可以通过如下命令对test.c进行预处理:

或者直接调用cpp命令

上述命令中-E是让编译器在预处理之后就退出,不进行后续编译过程;-I指定頭文件目录这里指定的是我们自定义的头文件目录;-o指定输出文件名。


上述命令中-S让编译器在编译之后停止不进行后续过程。编译过程完成后将生成程序的汇编代码test.s,这也是文本文件内容如下:


汇编过程将上一步的汇编代码转换成机器码(machine code),这一步产生的文件叫做目標文件是二进制格式。gcc汇编过程通过as命令完成:

这一步会为每一个源文件产生一个目标文件因此mymath.c也需要产生一个mymath.o文件


链接过程将多个目标文以及所需的库文件(.so等)链接成最终的可执行文件(executable file)。

几种语言的编译执行本质区别:

Java:先编译成字节码然后由JVM虚拟机执行字节码
C:直接编译成可执行文件,然后由操作系统执行可以行文件

}

我要回帖

更多关于 c语言编译过程5步骤 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信