当前位置: 首页 > 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.符号表的合并和符号表的定位


总结 

http://www.lryc.cn/news/1751.html

相关文章:

  • git报错大全,你将要踩的坑我都帮你踩了系列
  • LabVIEW中使用.NET方法时出现错误1316
  • HTTP2.0 相比 HTTP1.0、HTTP1.1 有哪些重大改进?值得升级更换吗?
  • 九、Linux文件 - fopen函数和fclose函数讲解
  • 轨迹预测算法vectorNet调研报告
  • 基于STM32设计的避障寻迹小车
  • 【视觉检测】使用opencv编写一个图片缺陷检测流程
  • 3.Dockerfile 定制镜像
  • Web基础与HTTP协议
  • 【化学试剂】endo-BCN-PEG4-Pomalidomide,(1R,8S,9S)-双环[6.1.0]壬-四聚乙二醇-泊马度胺纯度95%+
  • 全板电镀与图形电镀,到底有什么区别?
  • Zabbix 构建监控告警平台(二)--
  • 开学季,关于校园防诈骗宣传,如何组织一场微信线上答题考试
  • 蓝牙单点技术实现路径介绍
  • Ubuntu22.04 用 `hwclock` 或 `timedatectl` 来设置RTC硬件时钟为本地时区
  • Node=>Express路由 学习2
  • Android 面试三部曲——你做到了几点?
  • windeployqt实现一键打包
  • ESP32S3系列--SPI主机驱动详解(二)
  • 51单片机15单片机 时钟芯片DS1302【更新中】
  • SaleSmartly(ss客服)带你了解:缩短B2B销售周期的秘诀
  • 九龙证券|A股苏州板块迎来“200+”里程碑
  • vcruntime140_1.dll无法继续执行代码,怎么解决这种问题?
  • 正大国际期货:外盘震荡行情的特征及突破信号的确立
  • 【ESP 保姆级教程】玩转emqx数据集成篇④ ——数据桥接之HTTP服务
  • 蓝桥杯算法训练合集十三 1.P06022.P07033.逗志芃的危机4.唯一的小可爱5.JOE的矩阵
  • 切换分支报错:Untracked Files Prevent Checkout
  • endo-BCN-PEG4-Palmitic,环丙烷环辛炔四聚乙二醇-Palmitic包装灵活
  • 多传感器融合定位十一-基于滤波的融合方法Ⅱ
  • JAVA使用poi解析execl解决数值被转为科学计数法(如:手机号、身份证号、电话、等)解决方法