我们已经准备好了,你呢?

2024我们与您携手共赢,为您的企业形象保驾护航!

1.环境配置

在Linux操作系统中(),打开终端,以管理员root模式登录

1.更新:输入命令apt

2.下载vim:输入命令apt vim -y

3.下载gcc:输入命令apt gcc -y

4.下载g++:输入命令apt g++ -y

5.下载make:输入命令apt make -y

安装成功:

2.创建一个 C 程序

【示例1】输出Hello word!

1.首先进入要创建文件的目录,然后创建一个.c文件:

例如在这里创建一个main.c文件

在这里插入图片描述

2.通过vi打开main.c文件

(1)输入vi,进入命令模式,在命令模式下不能进行一般的输入操作。

在这里插入图片描述

(2)输入 i 进入插入模式

例子:

在这里插入图片描述

在插入模式下,您可以执行输入操作:

在这里插入图片描述

输入信息后,按Esc返回命令模式:

在这里插入图片描述

(3)输入:进入末行模式:

在这里插入图片描述

(4)输入wq,回车保存退出:

在这里插入图片描述

3.编译C程序

在main.c中写入一段代码后,在终端输入gcc -o main main.c,对main.c文件进行编译:

在这里插入图片描述

这时候我们可以看到在当前目录下生成了一个可执行程序main,我们用ls -l查看的话发现这个生成的文件是有可执行权限的,也就是说可以运行了。

4.执行C程序

输入要执行的C程序的可执行程序路径:

相当于:

5.C程序的编译和链接过程

C语言源程序的后缀必须为.c,源文件存放在硬盘上是永久保存的。C语言的.c程序不能直接执行,必须经过编译、链接后才能生成计算机上能执行的二进制可执行程序,然后这个二进制可执行程序才能运行。可以使用gcc -o main main.c将不可执行的.c程序转换成可执行的二进制程序main。

程序编译的过程分为预编译、编译、汇编和链接4个步骤,通过这四个步骤将高级语言翻译成机器指令(二进制),最终的二进制机器指令可以在计算机上直接执行。

在这里插入图片描述

【示例】进入vi,编写一段C语言代码,初始化一个数组,并保存

在这里插入图片描述

1. 预编译阶段

(1)删除所有“#”,并展开所有宏定义;

(2)处理所有条件预编译指令,例如“#if”、“#ifdef”、“#endif”等。

(3)处理“#”预编译指令,将包含文件插入到预编译指令的位置;

(4)删除所有评论;

(5)增加行号和文件名标识符,以便编译器能够生成用于调试的符号信息,并在编译过程中产生编译错误和警告时显示行号;

(6)保留所有# 指令,因为编译器需要使用它们。

例子:

删除main文件后,预编译当前的main.c文件,使用gcc -E main.c -o main.i预编译main.c文件,并显示结果,可以看到生成了main.i文件:

在这里插入图片描述

使用 vi 打开 main.i 文件:

在这里插入图片描述

可以看到文件完全展开,宏也展开,并且注释被删除。

2. 编译阶段

词法分析、语法分析、语义分析、代码优化、总结符号。

例子:

使用gcc -S main.i -o main.s将预编译文件main.i转换为编译文件main.s,并用vi打开main.s文件:

main.s 文件充满了汇编代码:

在这里插入图片描述

3.组装阶段

将汇编指令翻译成二进制格式,生成个体,并生成符号表。

例子:

使用gcc -c main.s -o main.o将编译阶段生成的main.s文件转换成汇编的二进制机器指令main.o,并用vi打开main.o文件:

main.o文件是二进制机器指令:

在这里插入图片描述

上图的ELF文件就是这个文件的格式。

虽然main.o是二进制指令文件,但是它并不能被执行,因为当前的main.o是将我们编写的main.c文件翻译成二进制指令。此时main.o还只是我们整个程序的一部分,因为我们自己写的代码用到了很多别人的代码,比如不是我们自己实现的,声明只放在#中,而实现是在C库函数中,所以最后必须链接起来才可以运行。所以最终的可执行程序除了自己编写的代码之外,还链接了一些会用到的基本代码,库中其实就包含了编译好的.o文件。

4. 链接阶段

(1)逐一合并,调整起始位移和段大小,合并符号表,进行符号解析,为符号分配虚拟地址。

(2)符号重定位。

例子:

使用gcc -o main main.o将汇编阶段生成的main.o文件转换为二进制可执行程序,并用vi打开main文件:

主文件是一个二进制可执行文件:

在这里插入图片描述

6. 通用汇编编写方法

1. 两步走

首先通过gcc -c main.c 一步生成.o文件,然后通过gcc -o main main.o 将.o文件转化为可执行文件main,并执行:

在这里插入图片描述

2. 一步到位

直接通过gcc -o main main.c 一步生成可执行文件main,执行:

在这里插入图片描述

二维码
扫一扫在手机端查看

本文链接:https://by928.com/5171.html     转载请注明出处和本文链接!请遵守 《网站协议》
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。

项目经理在线

我们已经准备好了,你呢?

2020我们与您携手共赢,为您的企业形象保驾护航!

在线客服
联系方式

热线电话

13761152229

上班时间

周一到周五

公司电话

二维码
微信
线