高级语言的编译过程和解释过程_C语言-编译过程与内存分配

一、编译过程

a6958c86846a6f247e6f2b2afb47bb7c.png

1、 预编译(预处理)

预处理过程实质上是处理“#”,将#include包含的头文件直接拷贝到hell.c当中;将#define定义的宏进行替换,同时将代码中没用的注释部分删除等

具体做的事儿如下:

(1)将所有的#define删除,并且展开所有的宏定义。说白了就是字符替换

(2)处理所有的条件编译指令,#ifdef #ifndef #endif等,就是带#的那些

(3)处理#include,将#include指向的文件插入到该行处

(4)删除所有注释

(5)添加行号和文件标示,这样的在调试和编译出错的时候才知道是是哪个文件的哪一行

(6)保留#pragma编译器指令,因为编译器需要使用它们。

gcc -E hello.c -oa.c可以生成预处理后的文件。

2、 编译

编译的过程实质上是把高级语言翻译成机器语言的过程,即对a.c做了这些事儿

(1)词法分析,

(2)语法分析

(3)语义分析

(4)优化后生成相应的汇编代码

从 高级语言->汇编语言->机器语言(二进制)

gcc-S hello.c -o a.s可以生成汇编代码

gcc -c hello.c -oa.o将源文件翻译成二进制文件。

3、 链接

linux内存分配

28362e5b5915c6cc349948fa76bebb78.png
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言是一种面向过程的编程语言,它也需要经过编译来将源代码转换成可执行的机器代码。编译是将源代码翻译成计算机能够理解和执行的指令的过程。 在C语言中,源代码文件通常以.c作为文件扩展名。编写完C语言源代码后,需要使用编译器将其转换为机器码,以便计算机可以执行。编译器是一种特殊的软件工具,可以将源代码文件转换为可执行程序。 编译过程包括以下几个步骤: 1. 预处理(Preprocessor):处理以 # 开头的预处理指令,如#include和#define。预处理器会将头文件中的内容插入到源代码文件中,处理宏定义和条件编译等指令。 2. 编译(Compiler):将预处理后的代码转换为汇编语言,生成相应的汇编代码文件。编译器将源代码翻译成汇编代码,汇编代码是一种低级语言,用于表达机器指令。 3. 汇编(Assembler):将汇编代码转化为机器码,生成目标代码文件。汇编器将汇编代码转化为二进制机器指令,这些指令可以被计算机直接执行。 4. 链接(Linker):将目标代码文件与库文件进行链接,生成可执行的二进制文件。链接器会将目标代码和库文件中的函数和符号进行连接,生成最终的可执行文件。 通过这个编译过程,C语言程序就可以被转换为可以在计算机上运行的可执行文件。由于C语言是一种系统级语言,它的编译过程更加底层和细致,这使得C语言程序可以更充分地控制计算机的硬件资源,提高程序的执行效率。与其他高级语言相比,C语言编译过程更加复杂,需要程序员更加关注细节和底层的实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值