当前位置: 首页 > news >正文

C语言预处理

文章目录

目录

文章目录

前言

一、程序编译的过程

二、编译阶段

1.预处理(*.i)

2.编译(*.s)

3.汇编(*.o)

4.链接

总结



前言

提示:使用vs code(gcc编译器)与vs2022来演示c语言的预处理


提示:以下是本篇文章正文内容,下面案例可供参考

一、程序编译的过程

 

二、编译阶段

以下是使用vscode——gcc编译器

1.预处理(*.i)

test.c

#include <stdio.h>
#include "test.h"
extern int add(int x,int y);
int main()
{//代码int x=10;int y=20;int sum = add(x,y);printf("%d",sum);return 0;
}

test.h

typedef struct test
{int b;char a;
}test1;

我们使用指令编译——》

gcc -E test.c -o test.i

会得到一个*.i的文件

过后我们会看见一个test.i的文件

这个就是预处理文件

内容为下:

分析:

它把test.h和test.c的文件合并在一了并且把注释删除了(还会把#define 宏的符号替换或者删除)【这里没有展现出了,你们可以试试看】

总结:

是有用可用的保留,无用的删除——文本操作

2.编译(*.s)

gcc -c test.i

把预编译文件——》编译文件*.s

 

会得到汇编代码

如下

	.file	"test.c".text.def	__main;	.scl	2;	.type	32;	.endef.section .rdata,"dr"
.LC0:.ascii "%d\0".text.globl	main.def	main;	.scl	2;	.type	32;	.endef.seh_proc	main
main:pushq	%rbp.seh_pushreg	%rbpmovq	%rsp, %rbp.seh_setframe	%rbp, 0subq	$48, %rsp.seh_stackalloc	48.seh_endprologuecall	__mainmovl	$10, -4(%rbp)movl	$20, -8(%rbp)movl	-8(%rbp), %edxmovl	-4(%rbp), %eaxmovl	%eax, %ecxcall	addmovl	%eax, -12(%rbp)movl	-12(%rbp), %eaxmovl	%eax, %edxleaq	.LC0(%rip), %rcxcall	printfmovl	$0, %eaxaddq	$48, %rsppopq	%rbpret.seh_endproc.ident	"GCC: (x86_64-win32-seh-rev0, Built by MinGW-W64 project) 8.1.0".def	add;	.scl	2;	.type	32;	.endef.def	printf;	.scl	2;	.type	32;	.endef

 分析:

把c语言转变为汇编

其中有语法分析,语义分析,词法分析,符号分析等

3.汇编(*.o)

gcc -c test.s

把汇编文件变成二进制

4.链接

每一个目标文件由链接器捆绑在一起,形成一个可执行的程序。

1.合并段表

2.符号表的合并和符号表的定位


总结 

相关文章:

C语言预处理

文章目录 目录 文章目录 前言 一、程序编译的过程 二、编译阶段 1.预处理(*.i&#xff09; 2.编译(*.s) 3.汇编(*.o) 4.链接 总结 前言 提示&#xff1a;使用vs code(gcc编译器)与vs2022来演示c语言的预处理 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面…...

git报错大全,你将要踩的坑我都帮你踩了系列

使用git push -u origin master报下面的错&#xff1a; 使用git push -u origin master报下面的错&#xff1a; Updates were rejected because the remote contains work that you do not have locally&#xff0c;This is usually caused by another repository pushing to …...

LabVIEW中使用.NET方法时出现错误1316

LabVIEW中使用.NET方法时出现错误1316为什么不能调用带有泛型参数的方法&#xff1f;LabVIEW不支持哪些.NET功能&#xff1f;为什么会收到以下错误&#xff1a;发生此错误的原因是正在调用LabVIEW中不支持的.NET功能。有关解决方法&#xff0c;请参阅“其他信息”部分。可以在下…...

HTTP2.0 相比 HTTP1.0、HTTP1.1 有哪些重大改进?值得升级更换吗?

目录 HTTP1.0 HTTP1.1 HTTP2.0 主要特性对比 HTTP发展历史 HTTP2解决的问题 HTTP1.0 HTTP1.1 HTTP2.0...

九、Linux文件 - fopen函数和fclose函数讲解

目录 1.fopen函数 2.fclose函数 3.fopen函数和fclose实战 1.fopen函数 fopen fwrite fread fclose ...属于标准C库 include <stdio.h> standard io lib open close write read 属于Linux系统调用 可移植型&#xff1a;fopen > open&#xff08;open函数只在嵌入…...

轨迹预测算法vectorNet调研报告

前言 传统的行为预测方法是规则的&#xff0c;基于道路结构的约束生成多个行为假设。最近&#xff0c;很多基于学习的预测方法被提出。他们提出了对于不同行为假设的进行概率解释的好处&#xff0c;但是需要重构一个新的表示来编码地图和轨迹信息。有趣的是&#xff0c;虽然高精…...

基于STM32设计的避障寻迹小车

一、前言 1.1 项目背景 根据美国玩具协会在一项研究中&#xff0c;过去几年全球玩具销售增长与GDP的世界平均水平大致相同。但全球玩具市场的内部结构已经占据了巨大的位置变化&#xff1a;传统玩具的市场份额正在下降&#xff0c;高科技电子玩具正在蓬勃发展。全球玩具市场的…...

【视觉检测】使用opencv编写一个图片缺陷检测流程

1. 导入必要的库&#xff0c;如OpenCV&#xff0c;NumPy等。 2. 使用OpenCV读取图像&#xff0c;并将其转换为灰度图像。 3. 使用OpenCV的Canny边缘检测算法检测图像中的边缘。 4. 使用OpenCV的Hough变换算法检测图像中的线条。 5. 使用OpenCV的模板匹配算法检测图像中的缺…...

3.Dockerfile 定制镜像

3. Dockerfile 定制镜像 从上一节的docker commit的学习中&#xff0c;我们可以了解到&#xff0c;镜像的定制实际上就是定制每一层所添加的配置、文件等信息&#xff0c;但是命令毕竟只是命令&#xff0c;每次定制都得去重复执行这个命令&#xff0c;而且还不够直观&#xff…...

Web基础与HTTP协议

Web基础与HTTP协议一、Web基础与HTTP概述1、域名概念二、域名服务与域名注册1、域名定义2、域名服务三、网页访问&#xff08;http、https&#xff09;1、网页概述2、网页的基本标签四、Web1、Web概述2、Web1.0 Web2.0五、HTTP协议概述1、HTTP协议简介2、HTTP协议请求总结一、W…...

【化学试剂】endo-BCN-PEG4-Pomalidomide,(1R,8S,9S)-双环[6.1.0]壬-四聚乙二醇-泊马度胺纯度95%+

一、基础产品数据&#xff08;Basic Product Data&#xff09;&#xff1a;CAS号&#xff1a;N/A中文名&#xff1a;(1R,8S,9S)-双环[6.1.0]壬-四聚乙二醇-泊马度胺英文名&#xff1a;endo-BCN-PEG4-Pomalidomide二、详细产品数据&#xff08;Detailed Product Data&#xff09…...

全板电镀与图形电镀,到底有什么区别?

衔接上文&#xff0c;继续为朋友们分享普通单双面板的生产工艺流程。 如图&#xff0c;第四道主流程为电镀。 电镀的目的为&#xff1a; 适当地加厚孔内与板面的铜厚&#xff0c;使孔金属化&#xff0c;从而实现层间互连。 至于其子流程&#xff0c;可以说是非常简单&#x…...

Zabbix 构建监控告警平台(二)--

Apache监控示例&#xff08;图形监控&#xff09;模板TemplateZabbix Items 1.Apache监控示例&#xff08;图形监控&#xff09; 1.1创建主机组 在“配置”->“主机群组”->“创建主机群组” 填入组名“webserver_test” 创建完成之后可以在“配置”->"主机群组&…...

开学季,关于校园防诈骗宣传,如何组织一场微信线上答题考试

开学季&#xff0c;关于校园防诈骗宣传&#xff0c;如何组织一场微信线上答题考试如何组织一场微信线上答题考试在线考试是一种非常节约成本的考试方式&#xff0c;考生通过微信扫码即可参加培训考试&#xff0c;不受时间、空间的限制&#xff0c;近几年越来越受企事业单位以及…...

蓝牙单点技术实现路径介绍

本文主要介绍蓝牙设备与手机一对一相连的 蓝牙单点 技术。 准备工作 系统要求&#xff1a;蓝牙使用需要安卓 4.3 以及以上版本&#xff0c;智能生活 App SDK 从安卓 4.4 开始支持。Manifest 权限&#xff1a; <uses-permission android:name"android.permission.ACCE…...

Ubuntu22.04 用 `hwclock` 或 `timedatectl` 来设置RTC硬件时钟为本地时区

Ubuntu22.04用 hwclock 或 timedatectl 来设置硬件时区为本地时区 可以用hwclock命令 sudo hwclock --localtime --systohc&#x1f446;效果等同&#x1f447; , --localtime的简写是-l ; --systohc的简写是-w sudo hwclock -l -w也可以用timedatectl命令 &#x1f446;效果…...

Node=>Express路由 学习2

1.概念 Express路由指的是客户端的请求与服务器处理函数之间的映射关系 Express路由由三部分组成 请求类型 请求URL地址 处理函数 app.METHOD ( PATH , HANDLER )根据定义的先后顺序进行匹配 请求类型和请求的URl同时匹配成功才会调用相应的处理函数 简单用法 2.模块化路由 为了…...

Android 面试三部曲——你做到了几点?

今天的干货来点轻松一点的&#xff0c;这次的分享是《面试需要哪些准备&#xff1f;》&#xff0c;主要分为三个部分&#xff1a; 面试前。面试中。面试后。 面试前 1、『工作经验中的职位要层层递进&#xff1a;初、中、高、资深级』&#x1f352; 2.投简历 你的简历必须要…...

windeployqt实现一键打包

每次发布QT程序前,都必须要在命令行环境下运行windeployqt 工具进行打包,加载相关的lib文件,才能正常运行。但是在命令行模式下,每次都要手动输入windeployqt的目录,和应用程序的位置目录,效率非常低,见下图: 那QT有没有什么好用的工具可以避免这个问题呢,认真找了一下…...

ESP32S3系列--SPI主机驱动详解(二)

一、目的 在上一篇《ESP32S3系列--SPI主机驱动详解(一)》我们介绍了ESP32S3的SPI外设的基本情况以及主机驱动的一些知识点,包括主机驱动的特点、总线的初始化、从设备的加入、传输模式分类等等。 本篇我们将从代码角度帮助大家进一步理解传输接口的一些细节问题。 二、实战 …...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)

推荐 github 项目:GeminiImageApp(图片生成方向&#xff0c;可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

HubSpot推出与ChatGPT的深度集成引发兴奋与担忧

上周三&#xff0c;HubSpot宣布已构建与ChatGPT的深度集成&#xff0c;这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋&#xff0c;但同时也存在一些关于数据安全的担忧。 许多网络声音声称&#xff0c;这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...

区块链技术概述

区块链技术是一种去中心化、分布式账本技术&#xff0c;通过密码学、共识机制和智能合约等核心组件&#xff0c;实现数据不可篡改、透明可追溯的系统。 一、核心技术 1. 去中心化 特点&#xff1a;数据存储在网络中的多个节点&#xff08;计算机&#xff09;&#xff0c;而非…...

Android写一个捕获全局异常的工具类

项目开发和实际运行过程中难免会遇到异常发生&#xff0c;系统提供了一个可以捕获全局异常的工具Uncaughtexceptionhandler&#xff0c;它是Thread的子类&#xff08;就是package java.lang;里线程的Thread&#xff09;。本文将利用它将设备信息、报错信息以及错误的发生时间都…...

游戏开发中常见的战斗数值英文缩写对照表

游戏开发中常见的战斗数值英文缩写对照表 基础属性&#xff08;Basic Attributes&#xff09; 缩写英文全称中文释义常见使用场景HPHit Points / Health Points生命值角色生存状态MPMana Points / Magic Points魔法值技能释放资源SPStamina Points体力值动作消耗资源APAction…...

CppCon 2015 学习:REFLECTION TECHNIQUES IN C++

关于 Reflection&#xff08;反射&#xff09; 这个概念&#xff0c;总结一下&#xff1a; Reflection&#xff08;反射&#xff09;是什么&#xff1f; 反射是对类型的自我检查能力&#xff08;Introspection&#xff09; 可以查看类的成员变量、成员函数等信息。反射允许枚…...

__VUE_PROD_HYDRATION_MISMATCH_DETAILS__ is not explicitly defined.

这个警告表明您在使用Vue的esm-bundler构建版本时&#xff0c;未明确定义编译时特性标志。以下是详细解释和解决方案&#xff1a; ‌问题原因‌&#xff1a; 该标志是Vue 3.4引入的编译时特性标志&#xff0c;用于控制生产环境下SSR水合不匹配错误的详细报告1使用esm-bundler…...

npm安装electron下载太慢,导致报错

npm安装electron下载太慢&#xff0c;导致报错 背景 想学习electron框架做个桌面应用&#xff0c;卡在了安装依赖&#xff08;无语了&#xff09;。。。一开始以为node版本或者npm版本太低问题&#xff0c;调整版本后还是报错。偶尔执行install命令后&#xff0c;可以开始下载…...