C语言预处理
创始人
2024-05-25 02:27:07

文章目录

目录

文章目录

前言

一、程序编译的过程

二、编译阶段

1.预处理(*.i)

2.编译(*.s)

3.汇编(*.o)

4.链接

总结



前言

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


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

一、程序编译的过程

 

二、编译阶段

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

1.预处理(*.i)

test.c

#include 
#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.符号表的合并和符号表的定位


总结 

相关内容

热门资讯

苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...