【Get】Linux下一起玩玩C程序设计

1、聊一聊

    周董最近发布了新歌《Mojito》,一定有小伙伴疑惑mojito是啥 ? 莫吉托(mojito)是一种起源于古巴的鸡尾酒。作者今天插入的是另一首周董比较新的电影主题曲,重点词是方文山所做!

    好了,今天主要是为大家介绍一下在linux下快速熟悉并搭建C编译和学习环境。

2、Windows与Linux的C编程环境

    大伙不会还在玩VC6.0吧 ? 估计又该碰到了一大堆软件安装和兼容性问题了,甚至用着用着程序打开不了了,所以建议大家学习一下现在比较新的编译学习环境,一方面熟悉了一款新的编译环境,另一方面新工具的一些优秀的功能也非常有助于大家的学习,推荐: VS、DevC++,VSCode。

    这些开发工具可能在Windows下面使用得比较多,没有接触过Linux的小伙伴对于在Linux下的C编程会有那么一丝丝畏惧,所以今天就为大家拨开这块的迷雾,首先来看看在进行C编程一般大家使用到哪些编译器功能 ?

1

编辑功能

   在写C程序的时候需要进行代码的编辑,也就是文本的编辑功能,如果不需要那些跳转定义、炫酷的文字结构显示,那么一个TXT文本编辑器即可替代。

2

编译功能

   当编写好对应的C程序代码以后,需要通过C编译器,编译、链接等工作,一方面生成最终对应的可执行文件来观看最后的程序运行结果,另一方面排除我们在编码过程的语法问题等,那么编译器必须得有。

3

调试功能

   代码编译好后发现最终的程序运行结果与预想的数据并不相符,那么需要排查程序的逻辑问题,可是苦于代码太多不好定位,于是我们需要使用调试功能来观看具体程序在运行过程中各变量的变化情况,从而定位问题,那么调试功能也不能少。

    那Linux的C编译环境是否有这样的功能呢?答案肯定是有的,不然大家平时代码怎么在Linux下面调试学习的!(见下图)

 Linux下  C 编译学习环境

   那么作者将通过介绍这四项工具帮助大家快速熟悉并搭建Linux下的C程序编译学习环境,本篇文章先给大家快速浏览下,做到心中有个整体轮廓。

3、常用命令行

    大部分小伙伴开始玩Linux的第一个较大的障碍应该算是命令行吧,不过现在Linux也会有着非常炫酷的用户GUI来与用户进行交互。如下面的ubuntu界面,说实在跟在window其实差不多了,大家想学Linux可以先安装一个就当作一个平板用也是可以的。

    如果你不想使用命令行可以直接像window那样进行点击,不过作为一名嵌入式程序员掌握一些基本的命令行能够更好的提高程序员的效率,同时在嵌入式开发中也是必备的。

    简单来说Linux用户GUI中进行的点击、创建、删除、移动文件等等内容都有着对应的命令行来进行操作,而且有时候命令行一条指令就能够搞定在图形界面中需要许多操作才能完成的功能。

体验一下命令行:

  • ls命令行用于展示当前目录的所有文件名称,“Linux一切皆文件”,相当于我们在window中点击文件夹,然后文件夹中展示的文件内容。

  • 然后我们使用cd命令行进入相应的目录,相当于我们windows中的点击文件夹从而进入想定位的文件夹。

  • 接着我们在使用cd命令行返回到上一级目录,并用ls命令查看当前目录内容。

  • 所以我们只要记忆了简单的几个命令行的使用就能够实现文件夹中查找文件了,虽然命令行挺多的,不过常用的就那么几个,比如创建文件夹什么的,就像我们在window中其实我们也仅仅只是用了部分功能。

3、Vim编辑器

    Vim没什么神奇的就是一个文本编辑器,跟平时大家在window下的文本编辑器是类似的,只是说该编辑器的功能非常适合程序员进行编码开发。

   安装好vim以后直接在终端中输入"vim 对应的文件"即可打开文件并进行编辑,如下图所示。

   这样就可以进入vim编辑器中对代码进行编辑,由于vim编辑器的输入全部靠键盘,而我们知道在windows中可以通过相应的菜单点击保存、退出、另存为等等,那么vim编辑器通过不同的按键切换不同的模式,比如编辑模式,命令模式等来区分编辑文本和对应的其他功能,从而满足我们对应的需求。

   上图我们在终端中使用vim编辑器编辑hello.c文件,界面一点也不逊色与windows中编辑,最后我们保存并退出,可以使用命令模式":wq"然后保存退出。所以大家可以弄一本命令行的书籍按照着在linux中敲写练习一下就能熟悉了。

4、GCC编译器

    既然文本编辑OK了,该轮到对应的编译器对代码进行编译了,在linux中基本上都是使用强大的gcc编译器,Linux等也基本上认为gcc为其标准的编译器。

    此时此刻的编译不再像我们在IDE等等中点击一个编译按钮那样完成一整套编译链接过程了,整个编译过程包括:预处理(也称预编译,Preprocessing)、编译(Compilation)、汇编(Assembly)和链接(Linking);那么通过gcc提供的命令行和命令行选项就能够一步一步执行上述过程,并且能够获得每个环节所产生的中间文件和相关信息,便于分析问题。我们可以输入gcc -v 命令行来看看版本信息,如下图所示:

    编译之前写好的Hello.c文件,这里采用命令行gcc hello.c -o hello即可直接编译生成可执行文件。

    我们通过命令行直接执行绿色的Hello可执行文件,便能够看到程序的输出结果。

    对于gcc更加详细的使用,作者先不在展开,后面会写一篇比较全面的文章跟大家仔细讲解下。

5、GDB调试器

    既然编辑器、编译器都有了,该调试器上场了,大家在window中所用的调试工具功能在gdb中全都有,设置断点,单步运行、停下来查看变量、条件断点、修改相关变量等等,可以说做到随心所欲,那么作者就在这里简单演示一下。

    首先我们将Hello.c通过Vim改成如下程序,便于大家看调试结果:

    然后通过命令行重新编译Hello.c文件,不过需要加上-g选项其主要是为让可执行文件具有相应的调试信息,这样才能使用gdb进行调试,其大小也相对直接生成的可执行文件要大。

    然后使用gdb hello来进入gdb调试模式,使用命令行break main在main函数前面设置断点,然后输入run命令进行调试程序。这个过程就非常像我们平时在windows里面打个断点,然后点击go运行。

    最后我们试一下单步运行调试输出,命令行输入next,就可以一步一步的输出了每行的调试信息,gdb还有很多高级使用技巧完全能满足大家调试需求。

6、makefile

    最后makefile算是大家在集成开发环境中比较难接触的一个文件,虽然上面介绍了编辑、编译、调试功能,可是当我们需要编译链接多个文件的时候,似乎命令行会写得非常复杂,那么为了简化并且能够自定义整个软件工程的编译链接过程,于是便产生了makefile。

   编写makefile需要遵循一定的规则,大家其实熟悉基本的编写规则以后大部分的makefile都能够看懂,然后修修改改就能使用。下面是我们把在命令行中的编译过程写到了makefile中,第一行的意思就是生成Hello,需要依赖于Hello.c,然后第二行是如何通过hello.c生成hello的具体方法。

   保存以后直接输入命令行make,便得到了最后的可执行文件,这个例子是非常简单的,当我们工程文件越来越大最终生成的可执行文件所依赖的过程和文件越来越多,这样也就相对比较复杂了,不过学习了基本全面的语法也就基本上可以看懂了。

7、最后小结

    本篇文章主要是给没有接触过Linux下C编程的小伙伴加把油,其实大家不需要畏惧Linux操作系统,畏惧那份陌生感,其实多类比windows很多东西都是想通的,由于篇幅有限,每块仅仅只是给大家简单介绍了一下,后续作者会整理每部分的详细文章再跟大家分享。

    好了,这里是公众号:“最后一个bug”,一个为大家打造的技术知识提升基地。同时非常感谢各位小伙伴的支持,我们下期精彩见!

推荐好文  点击蓝色字体即可跳转

【√】以后复位芯片,数据再也不会丢了(理论篇)

【√】以后复位芯片,数据再也不会丢了(实战篇)

【必看】嵌入式Engineer必经之路 -- "同步问题"

【重磅】剖析MCU的IAP升级软件设计(设计思路篇)

【进阶】除数为0,程序会奔溃吗?

【典藏】自制小型GUI界面框架(设计思想篇)

GUI必备知识之“告别”乱码(浅显易懂)

【经典】把脉printf中的C进阶技巧

【连载】通过"库文件"学单片机驱动编程(5)-完结篇

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值