Ubuntu18.04使用gcc编写C语言程序


一、使用gcc编写输出helloworld的C语言程序

1.创建文件夹

Linux下创建文件夹的方式这里介绍三种:
(1)创建一个文件夹,使用命令 “mkdir 文件夹名”
(2)批量创建多个文件夹,使用命令 “makdir 文件夹名1 文件夹名2 文件夹名3”
(3)嵌套文件夹,多级目录,使用命令 “mkdir -p 主文件夹名/一级文件夹名/二级文件夹名”
这里我们只需要创建一个文件夹即可,使用命令 mkdir embedded 创建一个名为embedded的文件夹。

2.创建hello.c文件

进入embedded文件夹,此时文件夹为空,这里介绍两种方式创建一个文件

方法一:

(1)打开控制台,输入命令 “touch 文件名” 创建一个文件,这里我们创建一个hello.c文件,使用命令 touch hello.c 即可。
在这里插入图片描述
(2)在hello.c文件中输入代码
文件中写代码不会有提示,写错了也不会显示,所以要细心,保存快捷键 Ctrl+s.
代码如下(示例):

#include <stdio.h>
int main()
{
	printf("hello world\n");
	return 0;
}

如图:
在这里插入图片描述

方法二:

这个方法是在控制台输入代码,我个人不是很喜欢,我倾向使用法一。
(1)控制台使用命令 vim hello.c,回车之后进入到代码编辑区,如下界面(我在另一个文件夹STM32中进行演示):
在这里插入图片描述
(2)按下 i键后,界面左下角变成**-- INSERT --**开始编辑操作,输入同样的代码:
在这里插入图片描述
(3)代码输入完后,先按下 Esc 键退出插入模式,然后再按下 shift :(shift键加冒号键),最后输入 wq,按下回车键,就保存修改并且退出了编辑界面,我们创建的hello.c文件中也有了刚输入的代码。

3.使用gcc编译

GCC编译器的编译流程是:预处理->汇编->编译->链接。

编译阶段编译命令作用
预处理gcc -E hello.c -o hello.i预处理阶段将根据已放置在文件中的预处理指令来修改源文件的内容
汇编gcc -S hello.i -o hello..s编译程序所要作得工作就是通过词法分析和语法分析,在确认所有的指令都符合语法规则之后,将其翻译成等价的中间代码表示或汇编代码
编译gcc -c hello.s -o hello.o汇编实际上指把汇编语言代码翻译成目标机器指令的过程,由汇编程序生成的目标文件并不能立即就被执行
链接gcc hello,o -o hello将有关的目标文件彼此相连接,也即将在一个文件中引用的符号同该符号在另外一个文件中的定义连接起来,使得所有的这些目标文件成为一个能够诶操作系统装入执行的统一整体

(1)预处理(Pre-Processing)
这个阶段主要处理源文件中的#indef,#include和#define预处理命令;
以“#”号开头的预处理指令如包含#include,宏定义制定#define等。在源程序中这些指令都放在函数之外,而且一般放在源文件的前面。

gcc -E (预处理) hello.c(源文件) -o hello.i(将结果生成的文件)

(2)编译(Compiling)
这里的编译不是指程序从源文件到二进制程序的全部过程,而是指将经过预处理的文件(hello.i)之后的程序转换成特定汇编代码(hello.s)的过程。

gcc -S (汇编) hello.i -o hello.s(汇编语言文件)

(3)汇编(Assembling)
汇编过程将上一步的汇编代码转换成机器码,这一步产生的文件叫做目标文件,是二进制格式。

gcc -c hello.s -o test.o

(4)链接(Compiling)
链接过程使用链接器将该目标文件与其他目标文件、库文件、启动文件等链接起来生成可执行文件。附加的目标文件包括静态连接库和动态连接库。

gcc hello.o -o hello

(5)运行
最后在终端输入 ./hello,就成功打印出 hello world!

./hello

运行界面截图:
在这里插入图片描述
在这里插入图片描述

总结
生成可执行程序有四个步骤:
1.由.c文件到.i文件,这个过程叫预处理。
2.由.i文件到.s文件,这个过程叫编译。
3.由.s文件到.o文件,这个过程叫汇编。
4.由.o文件到可执行文件,这个过程叫链接。
注意:.s文件本质上就是二级制文件(机器码),.o文件也是机器码


二、编写一个主程序文件main1.c和一个子程序文件sub1.c

(1)Ubuntu系统下编译

方法一:使用gcc命令编写

要求:子程序sub1.c 包含一个算术运算函数 float x2x(int a,int b),此函数功能为对两个输入整型参数做某个运算,将结果做浮点数返回;主程序main1.c,定义并赋值两整型变量,然后调用函数 x2x,将x2x的返回结果printf出来。

1.创建main.c和sub1.c文件

创建文件命令如下图:
在这里插入图片描述

2.按要求输入代码

sub1.c文件代码如下:
在这里插入图片描述
main.c文件代码如下(c知识复习:%d 是用来输出十进制整数型数据的实际长度,%f 是以小数形式输出单、双精度度数,隐含输出6位小数):
在这里插入图片描述

3.生成可执行文件并运行

在这里插入图片描述

方法二:使用Makefile方式编程

参考另一篇编写的博客:
https://blog.csdn.net/weixin_68811361/article/details/132858736?spm=1001.2014.3001.5502

(2)windows系统下编译

主函数main.cpp文件
在这里插入图片描述
运行截图:
在这里插入图片描述

代码如下:
在这里插入图片描述

参考文章:
网上很多大佬写的真的很详细,还有很多参考文章的没有罗列出来,谢谢大家纠正!

https://blog.csdn.net/heitui__/article/details/120241331

https://blog.csdn.net/Zhubingge/article/details/105202116

https://zhuanlan.zhihu.com/p/111500914

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菲菲QAQ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值