C语言的编译和链接过程

c语言的编译过程

计算机是如何理解我们所写代码的呢?如图C语言的编译和链接过程_第1张图片
这些由字母与数字组成的代码,计算机是不认识的。因为,他只认识,0和1。所以就需要将这些代码翻译成二进制表示。

这时美国国家标准协会(ANSI)及国际标准化组织推出的关于C语言的标准ANSI C
在ANSI C的任何一种实现中,存在两个不同的环境。

  • 翻译环境

在此环境中,将源代码转化成可执行的机器指令

  • 执行环境

用于执行代码

翻译环境详解

大概过程

在一个工程里,会有好几个源文件。翻译时

  1. 会将每一个源文件编译成目标文件(.obj文件)
  2. 每一个目标文件通过链接器形成一个单一且完整的可执行文件
  3. 链接器也会引入标准c语言函数库的所以函数,也可以引入第三方的库
    如图C语言的编译和链接过程_第2张图片

源代码在编译器中的详细过

1. 预编译

  • 将头文件(例如stdio.h)的内容直接插入到程序文本中
  • 将define定义德符号全部替换
  • 注释内容全部删除

2. 编译

将C语言代码翻译成汇编语言
其中包括:

  • 语义分析
  • 词法分析
  • 语法分析
  • 符号汇总(汇总每个文件中的 全局变量)

3. 汇编

将汇编指令翻译成二进制的指令
包含:

  • 制定符号表(标明每个符号的地址-函数在内存中的位置)

链接到底做了什么呢?

将工程中的目标文件和链接库通过链接器形成一个可执行的文件

  1. 合并段表
  2. 符号表的合并和重定位

你可能感兴趣的:(c语言学习笔记,c语言,开发语言)