iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言图文并茂详解程序编译过程
  • 286
分享到

C语言图文并茂详解程序编译过程

2024-04-02 19:04:59 286人浏览 八月长安
摘要

目录一、初识编译器二、程序被编译的过程三、小结一、初识编译器 编译器是一个广义的概念,真正的编译器由下面几个模块组成,真正的编译器是进行语法分析和语义分析的。 二、程序被编译的过程

一、初识编译器

编译器是一个广义的概念,真正的编译器由下面几个模块组成,真正的编译器是进行语法分析和语义分析的。

二、程序被编译的过程

如下,file.i 是中间代码,file.s 是一个汇编文件,file.o 是二进制文件。

预编译

  • 处理所有的注释,以空格代替
  • 将所有的 #define 删除,并且展开所有的宏定义
  • 处理条件编译指令 #if, #ifdef, #elif,#else,#endif
  • 处理 #include,展开被包含的文件
  • 保留编译器需要使用的 #pragma 指令

预处理指令示例:GCc -E file.c -o file.i

编译

对预处理文件进行词法分析,语法分析和语义分析

  • 词法分析:分析关键字,标示符,立即数等是否合法
  • 语法分析:分析表达式是否遵循语法规则
  • 语义分析:在语法分析的基础上进一步分析表达式是否合法

分析结束后进行代码优化生成相应的汇编代码文件

编译指令示例:gcc -S file.i -o file.s

汇编

  • 汇编器将汇编代码转变为机器的可以执行指令
  • 每条汇编语句几乎都对应一条机器指令

汇编指令示例:gcc -c file.s -o file.o

下面看一个源代码单步编译的示例:

demo.h


char* p = "Autumn";
 
int i = 0;

demo.c

#include "demo.h"
 
// Begin to define Macro
 
#define GREETING "Hello world!"
 
#define INC(x) x++
 
// End
 
int main()
{   
    p = GREETING;
 
    INC(i);
 
    return 0;
 
}

输入 gcc -E demo.c -o demo.i,如下:

然后就生成了 demo.i 文件,如下:

# 1 "demo.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "demo.c"
# 1 "demo.h" 1
# 9 "demo.h"
char* p = "Autumn";
 
int i = 0;
# 2 "demo.c" 2
# 11 "demo.c"
int main()
{
    p = "Hello world!";
 
    i++;
 
    return 0;
}

可以看到注释都没有了, demo.h 文件的全局变量被复制过来,宏也被替换掉了,#开头的信息是给后续编译器使用的。

输入gcc -S demo.i -o demo.s,如下:

然后就生成了 demo.o 文件,如下:

	.file	"demo.c"
.globl p
	.section	.rodata
.LC0:
	.string	"Autumn"
	.data
	.align 4
	.type	p, @object
	.size	p, 4
p:
	.long	.LC0
.globl i
	.bss
	.align 4
	.type	i, @object
	.size	i, 4
i:
	.zero	4
	.section	.rodata
.LC1:
	.string	"Hello world!"
	.text
.globl main
	.type	main, @function
main:
	pushl	%ebp
	movl	%esp, %ebp
	movl	$.LC1, p
	movl	i, %eax
	addl	$1, %eax
	movl	%eax, i
	movl	$0, %eax
	popl	%ebp
	ret
	.size	main, .-main
	.ident	"GCC: (ubuntu/Linaro 4.4.4-14ubuntu5.1) 4.4.5"
	.section	.note.GNU-stack,"",@progbits

最后输入gcc -c demo.s -o demo.o,如下:

这样就生成了一个 .o 文件

最后链接器出场了,输入 gcc demo.o,如下:

这样就生成一个 a.out 文件:

这样就能运行了

三、小结

编译过程分为预处理,编译,汇编和链接四个阶段

  • 预处理:处理注释,宏以及已经以 # 开头的符号
  • 编译:进行词法分析,语法分析和语义分析等
  • 汇编:将汇编代码翻译为机器指令的目标文件
  • 链接:链接到一起生成可执行程序

到此这篇关于C语言 图文并茂详解程序编译过程的文章就介绍到这了,更多相关C语言 编译过程内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C语言图文并茂详解程序编译过程

本文链接: https://www.lsjlt.com/news/146526.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言图文并茂详解程序编译过程
    目录一、初识编译器二、程序被编译的过程三、小结一、初识编译器 编译器是一个广义的概念,真正的编译器由下面几个模块组成,真正的编译器是进行语法分析和语义分析的。 二、程序被编译的过程...
    99+
    2024-04-02
  • C语言图文并茂详解链接过程
    目录一、链接器的意义二、模块链接三、小结一、链接器的意义 连接器的主要作用是把各个模块之间相互引用的部分处理好,使得各个模块之间能够正确的衔接。 二、模块链接 静态链接 由链接器在...
    99+
    2024-04-02
  • C语言从编译到运行过程详解
    目录C语言从编译到运行一、前言二、C程序编译过程三、阶段过程1、预处理阶段2、编译阶段3、汇编阶段4、链接阶段C语言从编译到运行 一、前言 最近在看CSAPP(深入理解计算机系统)然...
    99+
    2024-04-02
  • Go语言初探:编译过程详解
    标题:Go语言初探:编译过程详解 Go语言是一种开源的编译型静态语言,由谷歌开发,旨在提升编程效率和简化工程管理。作为一种现代化的编程语言,它具有出色的并发支持和高效的垃圾回收机制,同...
    99+
    2024-04-02
  • C语言程序的编译与预处理详解
    目录一、程序的编译1、 编译阶段2、链接二、预处理详解1、预定义符号2、#define定义的标识符3、#define定义的宏4、#unef总结一、程序的编译 我们写的源文件(*.c)...
    99+
    2024-04-02
  • C语言图文并茂讲解分支语句用法
    目录一、if 语句分析二、switch 语句分析三、小结一、if 语句分析 if 语句用于根据条件选择执行语句else 不能独立存在且总是与它最近的 if 相匹配else 语句后可以...
    99+
    2024-04-02
  • 怎么编译C语言程序
    这篇文章主要介绍了怎么编译C语言程序的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么编译C语言程序文章都会有所收获,下面我们一起来看看吧。编译/执行 C 程序实例#include <stdio.h>...
    99+
    2023-06-17
  • C语言 程序的编译系统解析
    目录程序的翻译环境和执行环境编译和链接翻译环境编译的几个阶段预处理编译汇编链接运行环境今天我来补一下C语言篇的程序的编译的一篇文章,也算是有一个结尾了。 程序的翻译环境和执行环境 在...
    99+
    2024-04-02
  • Go语言编译器实现原理与编译过程详解
    标题:Go语言编译器实现原理与编译过程详解 在计算机编程领域中,编译器是一种非常重要的工具,它负责将我们编写的高级语言代码转换为目标机器能够执行的机器码。Go语言作为一种快速、高效的编...
    99+
    2024-03-11
    编译器 go语言 实现
  • C语言程序环境编译的方法
    这篇文章主要介绍“C语言程序环境编译的方法”,在日常操作中,相信很多人在C语言程序环境编译的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言程序环境编译的方法”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-30
  • Golang编译过程详解
    Golang编译过程详解 Golang(也称为Go)是一种由Google开发的编程语言,它具有简洁、高效、并发等特点,因此受到了广泛的关注和应用。在使用Golang进行编程时,编译是一...
    99+
    2024-03-07
    编译 golang 过程
  • 使用VS2022开发在线远程编译部署的C++程序(图文详解)
    一、先来一点C++的资源分享,意思一下。 1、c++类库源码以及其他有关资源。站点是英文的,英文不好的话可以谷歌浏览器在线翻译。http://www.cplusplus.com/ ...
    99+
    2024-04-02
  • C语言程序环境编译+链接理论
    目录一、程序的翻译环境(编译和链接)二、程序的运行环境一、程序的翻译环境(编译和链接) 在ANSI C 的任何一种实现中,存在两个不同的环境: 第一种是翻译环境,在这个环境中源代码被...
    99+
    2024-04-02
  • 如何编译go语言程序
    本篇文章给大家分享的是有关如何编译go语言程序,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Go语言是编译型的静态语言(和C语言一样),所以在运行Go语言程序之前,先要将其编译...
    99+
    2023-06-15
  • C语言编程之预处理过程与define及条件编译
    目录名示常量#define重定义常量在#define中使用参数预处理器粘合剂:##运算符变参宏:… 和_ _ VAG_ARGS_ _宏与函数预处理指令#undef指令从C预处理器的角...
    99+
    2024-04-02
  • linux中怎么使用gcc编译c语言程序
    在Linux中使用gcc编译C语言程序,可以按照以下步骤操作:1. 打开终端窗口(Terminal)。2. 进入要编译的C语言程序所...
    99+
    2023-09-21
    linux c语言
  • C语言通过案例讲解并发编程模型
    目录1、按照指定的顺序输出2、生产者消费者模型3、读写锁下面代码、思路等来源于b站郭郭 和CSAPP样例,同时希望大家好好读一下CSAPP的内容,真的讲的很好 1、按照指定的顺序输出...
    99+
    2024-04-02
  • MacOs使用VS Code编译调试C语言程序
    参考博客:Windows/macOS使用VSCode搭建C/C++的开发/Debug环境 1. 在macOS安装VS Code 在微软官方下载适合macOS版本的VS Code。 2. 在VS Code的扩展里搜索并安装如下扩展 C/C++...
    99+
    2023-08-17
    macos c语言 vscode
  • 汇编语言开发过程详解
    目录一、逐步开发(1)源程序的编辑(2)源程序的汇编(3)目标文件的连接(4)可执行文件的运行二、列表文件与调试程序(1)列表文件(2)调试程序三、快速开发程序开发过程 一、逐步开...
    99+
    2024-04-02
  • C语言从编译到运行的过程是什么
    C语言从编译到运行的过程可以简单描述为以下几个步骤:1. 编写源代码:首先,程序员使用文本编辑器编写C语言源代码,包括各种语句和函数...
    99+
    2023-08-14
    C语言
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作