c/c++程序编译过程详解

Overboom Overboom     2023-02-05     173

关键词:

C语言的编译链接过程要把我们编写的一个c程序(源代码)转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接。编译就是把文本形式源代码翻译为机器语言形式的目标文件的过程。链接是把目标文件、操作系统的启动代码和用到的库文件进行组织,形成最终生成可执行代码的过程。过程图解如下:

从图上可以看到,整个代码的编译过程分为编译和链接两个过程,编译对应图中的大括号括起的部分,其余则为链接过程。

1. 编译过程

编译过程又可以分成两个阶段:编译和汇编。

1.1 编译

编译是读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,源文件的编译过程包含两个主要阶段:

1.1.1编译预处理

读取c源程序,对其中的伪指令(以# 开头的指令)和特殊符号进行处理。

伪指令主要包括以下四个方面:

  1. 宏定义指令,如# define Name TokenString,# undef等。
    对于前一个伪指令,预编译所要做的是将程序中的所有Name用TokenString替换&

c语言过程栈机制详解(代码片段)

...起着很重要的角色,为了更深入地理解一个c/c++程序是如何运作的、程序core时我们该怎么查找问题,弄清楚过程栈机制都是很有必要的!一、汇编语言基础1.c程序从源文件到执行的过程图1c/c++程序从源文... 查看详情

java运行机制详解|jvm规格描述

(一) Java应用程序的开发  Java应用程序的开发周期包括编译、下载、解释和执行几个部分。Java编译程序将Java源程序翻译为JVM可执行代码--字节码。这一编译过程同C/C++的编译有些不同。当C编译器编译生成一个对象的代码... 查看详情

java编译程序和运行过程详解

...t;语义分析和中间代码生成-->优化-->目标代码生成Java程序从源文件创建到程序运行要经过两大步骤:1、Java文件会由编译器编译成class文件(字节码文件),会经过编译原理简单过程的前三步;2、字节码由java虚拟机解释运行... 查看详情

c/c++中的预编译指令

...ning(disable:4267)不理解意思,遂查?C/C++中的预编译指令 程序的编译过程可以分为预处理、编译、汇编三部分,其中预处理是首先执行的过程,预处理过程扫描程序源代码,对其进行初步的转换,产生新的源代码提供给编译器 查看详情

c/c++-从代码到可执行程序的过程

(1)预编译主要处理源代码文件中的以“#”开头的预编译指令。处理规则见下:删除所有的#define,展开所有的宏定义。处理所有的条件预编译指令,如“#if”、“#endif”、“#ifdef”、“#elif”和“#else”。处... 查看详情

linux程序编译过程详解(代码片段)

...s://mp.weixin.qq.com/s/rLRXNY4EccBnJ5XVyjhjAA大家肯定都知道计算机程序设计语言通常分为机器语言、汇编语言和高级语言三类。高级语言需要通过翻译成机器语言才能执行,而翻译的方式分为两种,一种是编译型,另 查看详情

linux程序编译过程详解(代码片段)

...s://mp.weixin.qq.com/s/rLRXNY4EccBnJ5XVyjhjAA大家肯定都知道计算机程序设计语言通常分为机器语言、汇编语言和高级语言三类。高级语言需要通过翻译成机器语言才能执行,而翻译的方式分为两种,一种是编译型,另 查看详情

linux程序编译过程详解(代码片段)

...s://mp.weixin.qq.com/s/rLRXNY4EccBnJ5XVyjhjAA大家肯定都知道计算机程序设计语言通常分为机器语言、汇编语言和高级语言三类。高级语言需要通过翻译成机器语言才能执行,而翻译的方式分为两种,一种是编译型,另 查看详情

源代码到可执行程序的过程详解:预编译编译汇编链接(代码片段)

1、gcc编译过程分解(1)首先是将.c源文件和.h头文件经过预编译(cpp是预编译器),得到.i文件,主要是进行的一些替换工作;(2)将.i文件经过编译器(gcc)处理,得到.s汇编文件,现在文件内容已经从C语言编程了汇编... 查看详情

深入详解c/c++动态内存管理(代码片段)

目录1、从程序的完整启动过程去看程序的内存分区2、为什么要去动态申请堆内存?3、动态内存的申请与释放3.1、C语言中使用malloc等函数申请内存,使用free函数释放内存3.2、C++中使用new申请内存,使用delete释... 查看详情

问答题

...(不便于记忆)。语法不严格体现在,假如你写同样一个程序,在Java里面会报错,而在c语言里面是不会报错的。比如C语言中你可以将一个浮点型数据赋给一个整型变量,编译时只会警告,因为会丢失精度,但是在Java中这样写... 查看详情

详解c/c++中的static和extern(代码片段)

...、怎么使用呢?这部分会先给一个小例子,展示编译和运行效果,并不会深入解释背后的原因,关于底层原理的解释会放到后续的部分!头文件中定义全局变量异想天开的认为ÿ 查看详情

c/c++程序内存的各种变量存储区域和各个区域详解(代码片段)

...量和局部变量在内存里的区别? 一、预备知识—程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)—由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方... 查看详情

arduino编译上传过程详解(代码片段)

...它基本上由三个部分组成。你会在每个名为Sketch的Arduino程序中看到这三个部分。全局变量声明这个部分位于程序的开始部分。在这里您可以定义将在程序后面部分中使用的变量(全局变量)。在不需要任何全局变量的情况下,这部... 查看详情

程序执行过程(转载)

程序的基本流程如图: 1. 预处理预处理相当于根据预处理指令组装新的C/C++程序。经过预处理,会产生一个没有宏定义,没有条件编译指令,没有特殊符号的输出文件,这个文件的含义同原本的文件无异,只是内容上有... 查看详情

java基本概念

编译型语言与解释型语言编译型语言在程序执行之前,有一个单独的编译过程,将程序翻译成机器语言就不用再进行翻译了。解释型语言,是在运行的时候将程序翻译成机器语言,所以运行速度相对于编C/C++等都是编译型语言,... 查看详情

c语言中程序的编译(预处理操作)+链接详解(详细介绍程序预编译过程)(代码片段)

...包含4.3嵌套文件包含5.结尾1.前言今天我们来学习C语言中程序的编译和链接是如何进行的。在ANSIC的任何一种实现中,存在两个不同的环境。第1种是翻译环境,在这个环境中源代码被转换为可执行的机器指令。第2种是执... 查看详情

程序由创建到得到运行结果的过程你知道吗?程序的环境和预处理爆肝总结画图详解(代码片段)

程序的环境和预处理文章目录程序的环境和预处理程序的翻译环境和执行环境编译+链接翻译环境编译也分为三个阶段预处理阶段编译阶段汇编阶段链接阶段运行环境(执行环境)预处理详解预定义符号#define#define定义标识符#defin... 查看详情