C语言预处理、编译、汇编、链接过程

预处理,编译,汇编,链接 目录 前言 1.预处理: 宏替换: 头文件展开: 条件编译: 2.编译: 3.汇编: 4.链接: 前言 一个c/c++文件想要变成可执行文件要经过预处理生成预处理文件(.i文件),编译阶段对预处理文件进行编译生成汇编文件(.s文件),汇编阶段对汇编文件进行处理生成目标文件(.o文件),最后链接目标文件生成可执行程序。下面我将介绍在各个阶段对程序进行了哪些处理。 1.预处理: c/c++源文件中,以#开头的命令被称为预处理命令,如#include、#define、条件编译命令#if 阅读详情

预处理:

处理源代码中的预处理指令,引入头文件,去除注释,处理所有的条件编译指令,宏的替换,添加行号,保留所有的编译器指令,生成了.i文件

编译:

在预处理结束后,我们所要进行的就是编译。编译过程所进行的是对预处理后的文件进行语法分析,词法分析,语义分析,符号汇总,然后生成汇编代码。生成了.s文件

汇编:

这里的汇编所说的是一个过程,将汇编代码转成二进制文件,二进制文件就可以让机器来读取。每一条汇编语句都会产生一句机器语言 ,最终生成一个.o文件,在windows下就是.obj文件,这里生成的目标文件里面就是二进制文件。另外,在这需要注意的是,会形成符号表,给这些符号会分配虚拟地址。

链接:

链接所完成的任务是合并段表,然后把符号表合并并且对符号表进行重定位。
所谓合并段表,源代码编译生成的a.out会包含很多段,数据段文本段bss段等等,这些段是合并出来的,在编译过程中划分出来出来的,不同的数据会对应到不同的段中,在.o文件中其实已经发生了分段。
符号表合并和重定位说的是最后只生成了一个符号表,这个符号表是由前面汇编形成的多个符号表进行合并。在这里不在同一个符号表的符号,要对他们进行重定位。链接完成以后,也就生成了我们所说的.exe文件重点内容

C语言编译过程——预处理、编译汇编和链接详解 预处理、编译汇编链接详解 阅读详情

相关推荐

c语言编译过程详解,预处理,编译,汇编,链接(干货满满)

锲子 我们在各自的电脑上写下代码,得明白我们代码究竟是如何产生的,不想了解1,0什么的,但这几个环节必须掌握吧。 我们的代码会经过这4个环节,从而形成最终文件,c语言作为编译语言,用来向计算机发出指令。让程序员能够准确地定义计算机所需要使用的数据,并精确地定义在不同情况下所应当采取的行动。 预处理, 展开头文件/宏替换/去掉注释/条件编译 (t...

编程爱好者的博客 11万+

预处理、编译、汇编、链接

C语言的编译链接过程要把我们编写的一个c程序(源代码)转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接。编译就是把文本形式源代码翻译为机器语言形式的目标文件的过程。链接是把目标文件、操作系统的启动代码和用到的库文件进行组织形成最终生成可执行代码的过程 从图上可以看到,整个代码的编译过程分为编译和链接两个过程,编译对应图中的大括号括起的部分,其余则为链接过程。 过程图解如下: 编译过程又可以分成两个阶段:编译和汇编。 编译 编译是读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转

Chasing__Dreams的博客 2095

C语言编译过程详解,预处理,编译,汇编,链接

转自:https://blog.youkuaiyun.com/weixin_41143631/article/details/81221777 锲子 我们在各自的电脑上写下代码,得明白我们代码究竟是如何产生的,不想了解1,0什么的,但这几个环节必须掌握吧。 我们的代码会经过这4个环节,从而形成最终文件,c语言作为编译语言,用来向计算机发出指令。让程序员能够准确地定义计算 机所需要使用的数据,并精确地定义...

风的记忆 979

c语言编译过程详解,预处理,编译,汇编,链接

前言 我们的代码会经过这4个环节,从而形成最终文件,c语言作为编译语言,用来向计算机发出指令。让程序员能够准确地定义计算机所需要使用的数据,并精确地定义在不同情况下所应当采取的行动。 文件编译过程总结 预处理, 展开头文件/宏替换/去掉注释/条件编译 (test.i main .i) 编译, 检查语法,生成汇编 ...

qq_34462436的博客 373

C语言编译过程(预处理,编译,汇编,链接)

预处理 编译 汇编 链接 预处理 gcc -E test.c -o test.i 预处理用于对所有的#开头的语句进行预处理,生成 .i 文件。预处理之后得到的仍然是文本文件,但文件体积会大很多。 处理#include,将#include指向的文件插入到该行处 将所有的#define删除,并且展开所有的宏定义。说白了就是字符替换 处理所有的条件编译指令,#ifdef #ifndef #endif等,就是带#的那些 删除所有注释 添加行号和文件标示,这样的在调试和编译出错的时候才知道是是哪个文件的哪一行

weixin_42811383的博客 868

【编译、链接、装载一】预处理、编译、汇编、链接

预处理、编译、汇编、链接

junxuezheng的博客 6659

C语言:程序中的预处理、编译、汇编和链接过程

编译compile:源文件->中间代码文件ObjectFile(Windows下是.obj,Unix/Linux下是.o) 链接link:把大量的ObjectFile合成执行文件 备注: 01 编译时,编译器需要检查语法、函数与变量声明的正确,语法的正确是对于每个文件中基本指令的准确性,函数与变量的声明则需要告诉编译器头文件所在的位置。(声明在头文件,定义在C/C++文件),所有的语法正确,...

光年之外 1443

VS2022如何兼容老项目?.NET Framework 4.0/4.5安装避坑指南

本文提供了在Visual Studio 2022中兼容和维护.NET Framework 4.0/4.5等老旧项目的完整解决方案。针对VS2022无法直接识别旧框架的核心问题,文章详细剖析了原因,并重点推荐通过官方NuGet包安全获取引用程序集的方法,给出了从下载、解压到部署至标准目录的详细步骤。同时,文章还深入探讨了项目文件格式过旧、NuGet包还原失败等进阶问题的排查与解决策略,旨在帮助开发者高效、稳定地在现代开发环境中维护历史代码库。

weixin_27734811的博客 513

c语言编译过程详解,预处理,编译,汇编,链接(干货满满)(高级语言不一定都有生成汇编这一步骤)

c语言编译过程详解,预处理,编译,汇编,链接(干货满满) 木槿花better2018-07-27 19:33:3966303收藏458 分类专栏:计算机原理文章标签:c语言预处理编译汇编链接 版权 楔子 我们在各自的电脑上写下代码,得明白我们代码究竟是如何产生的,不想了解1,0什么的,但这几个环节必须掌握吧。 我们的代码会经过这4个环节,从而形成最终文件,c语言作为编译语言,用来向计算机发出指令。让程序员能够准确地定义计算机所需要使用的数据,并精确地定义在不同情况下...

二进制模----细微行动改变影响世界 746

Windows 10下Carla 0.9.15安装避坑指南:从下载到运行的全流程解析

本文详细解析了在Windows 10系统上安装和运行Carla 0.9.15自动驾驶仿真平台的全流程。内容涵盖从系统环境准备、资源下载、Python依赖安装,到首次启动验证及常见错误(如DLL缺失、显卡驱动问题)的深度解决方案,旨在帮助用户快速搭建稳定的开发环境,并运行第一个自动驾驶Python脚本。

alice7model的博客 544

104报文解析工具

可选择包含报文的文本文件或日志文件进行解析,可选择按条数范围或时间范围,输出结果可以在报文解析显示区,也可以输出到文件。可以对文本内容的报文文件进行高级分析,包括遥信遥测等通讯数据的具体信息,通讯帧的统计,通讯次数的统计,各种错误的分析,报文的定位功能,传输的文件具体内容等。输入完成后点击工具栏的解析报文按钮或使用右键菜单的解析就可以对报文进行解析。在报文输入区输入待解析报文并解析后,解析结果就显示在报文解析显示区和报文定位展示区及报文定位条目区。当有多条报文解析后,可以通过报文列表树具体定位某条报文。

XZHOUMIN的博客 5947

C语言编译生成可执行文件过程/预处理/编译/汇编/链接

预处理需要完成的工作有以下内容: ​ 预处理处理的工作大部分都是带#的,工作都是由”预编译器“来处理。​ linux下可以用下面操作得到.s汇编文件,为经过编译之后的文件: ​ 打开文件可以发现里面是符合x86的汇编文件,汇编文件取决于采用的编译器,如果是GCC,那么生成的则是x86格式的汇编,如果是用的ARM平台的交叉编译器,则生成

sunshineA_的博客 403

什么是 WhatsApp云控 WhatsApp群发,WhatsApp协议,他们有什么区别?

下面我们sensws讲解下什么是WhatsApp云控 WhatsApp群发,WhatsApp协议

sendws的博客 3874

C/C++语言预处理,编译,汇编,链接的详细过程讲解

一、问题背景 最近博主在复习各类编程语言知识时,在类比Java解释型高级语言的运行机制时,第一时间想到了C/C++的运行机制,于是博主我查阅相关资料后对C/C++的运行机制做一个详细但易懂的总结归纳。 二、C/C++的运行机制 程序要运行起来,必须要经过四个步骤:预处理、编译、汇编和链接。 预处理编译汇编链接hello.c, hello.hhello.ihello.shello.o或hello.o...

快乐李同学的博客 6215

Brainstorm简单分析近红外数据(fNIRS)(一)

Brainstorm分析fNIRS数据

weixin_43604817的博客 1350

Linux系统安装AutoDockTools、AutoGrid和AutoDock并实现分子对接(详细讲解)

linux系统为centos7.0 按照下面操作安装AutoDockTools(MGLTools) 1. 下载安装包,链接(https://ccsb.scripps.edu/mgltools/downloads/),我的linux系统是64位,下载红色标记源代码,拷贝入linux目标文件夹下。 2. shell终端进行安装: 1. 终端进入安装包所在文件夹,并获取root权限;赋予代码安装权限; cd /home/... #目标文件夹,根据目标程序文件位置进行更改 su #获

carlos_zhao的博客 1万+

【C语言】程序运行过程:预处理/编译/汇编/链接

文章目录1.程序运行的几个阶段1.1预编译1.2编译1.3汇编1.4符号表和链接2.运行环境结语 哈喽啊,盆友们。一起来看看C语言中编译预处理的内容吧!😜 1.程序运行的几个阶段 众所不周知,C语言的程序运行分为几个阶段。 咱们可以看看下面这个图,简单了解一二👇 细分开来,编译还分为3个小阶段:预编译(预处理)、编译、汇编 这三个阶段又分别做了什么事情呢?这就需要我们用linux下的gcc编译器来验证了 1.1预编译 现在我们编写了一个这样的代码 在运行窗口中输入以下指令,进行预编译操作,得到tes

慕雪华年的博客 1万+

【项目实战】SOVD协议(面向服务的车辆诊断协议)

此外,AUTOSAR组织将SOVD部分内容的软件实现定义在了R22-11及以上版本的AUTOSAR Adaptive规范中,还支持动态发现车内诊断功能、获取高性能计算机(HPC)的Log信息等新的诊断需求,更符合当前软件定义汽车概念下的行业趋势。而SOVDGateway作为边缘节点,也肩负着对SOVD Client进行认证以及权限控制的责任,从而保证车辆的信息安全。相较于传统的UDS(Unified Diagnostic Services)协议,SOVD不仅保留了传统的读写数据、例程控制、故障读取等功能,

奶爸的编程之路,也就一周冷个三天 1900

Linux下C语言执行过程(预处理,编译,汇编,链接,执行)

1、C语言的执行过程包括5个步骤:分别是:预处理,编译,汇编,链接,执行 第一步:编写C源代码,截图如下: 2、预处理,命令为:gcc -E variable.c -o variable.i(这步的作用是文件的展开和宏替换),生成的文件类型是.i类型的。 3、编译:命令为:gcc -S variable.i -o variable.s,这里的.s文件就成了会变语言,截图如下: 4、

涂作权的博客 2681

python发送邮件的时候出现 error (535, b‘5.7.3 Authentication unsuccessful‘) 解决方法

出现该Bug的原因主要是 账号密码无法登录,但原先使用该代码测试qq或者163的时候是可以通过的!问题在于各个公司邮件所处理的代码方式不一样

码农研究僧的博客 3502

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

C语言编译过程(预处理、编译、汇编、链接)

目录命令C语言源程序预处理(Preprocessing)编译(Compilation)汇编(Assembly)链接(Linking) 命令 $ gcc -E hello.c -o hello.i $ gcc -S hello.i -o hello.s $ gcc -c hello.s -o hello.o $ gcc hello.o -o hello $ $ ./hello hello world! pre-compiled here! static __always_inline void func

EricTsai的专栏 440

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

【C 语言】编译过程 分析 ( 预处理 | 编译 | 汇编 | 链接 | 宏定义 | 条件编译 | 编译器指示字 )

编译过程 : 预处理 -> 编译 -> 汇编 -> 链接; 1. 编译预处理 : 产生 .i 后缀的预处理文件; 2. 编译操作 : 产生 .s 后缀的汇编文件; 3. 汇编操作 : 产生 .o 后缀的机器码二进制文件; 4. 链接操作 : 产生可执行文件 ;

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 3115

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

C语言基础-预处理-编译-汇编-链接的过程讲解

目录 前言: 1: 预处理 2: 编译 3:汇编 4:链接 结束语 前言: 平时总是在在linux系统上通过gcc编译文件,这里gcc整个编译的过程说明一下,做一下基础知识备份。 编译其实一共分为4步:预处理,编译,汇编,链接。下面我就详细说一下C语言的编译这四步的作用。 首先,我们看一下简单的代码 hello.c 文件,我们通过vim编写即可: #include <stdio.h> #define PI 3.14 int main(v...

guocy_lm的专栏 804
上一篇: 运算符重载
下一篇: C语言文件操作函数详解
ffsiwei
博客等级 码龄9年 72粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值