Linux下C语言编程基础

Linux下C语言编程基础

一、目的

  1. 熟悉Linux系统下的C开发环境
  2. 熟悉vi的基本操作
  3. 熟悉gcc编译器的基本原理
  4. 熟练使用gcc编译器的常用选项
  5. 熟练使用gdb调试技术
  6. 熟悉makefile基本原理及语法规范
  7. 掌握静态库和动态库的生成

二、实验步骤

Linux下C编程的工具集:

  • Vim
  • GCC
  • GDB
  • Make

我们提倡在Linux命令行下学习C程序设计。学习时在Ubuntu Bash中通过 Ctrl+Shift+T快捷键打开三个标签(tab),:

  • 一个使用vim编辑代码;
  • 一个使用gcc(或makefile)编译运行代码;
  • 一个使用GDB调试代码。

我们可以使用 ALT+1, ALT+2, ALT+3快速切换,达到使用IDE一样的感觉。

Linux下C语言编程基础

2. Vim

Ubuntu中可以使用 sudo apt install vim 安装Vim。Vim使用参考”做中学之学用学用Vim

3. gcc

GNU CC(简称为gcc)是GNU项目中符合ANSI C标准的编译系统,能够编译用C、C++和Object C等语言编写的程序。gcc又是一个交叉平台编译器,它能够在当前CPU平台上为多种不同体系结构的硬件平台开发软件,因此尤其适合在嵌入式领域的开发编译。 GCC编译代码的过程如下:

Linux下C语言编程基础

我们可以把编译过程分成四步,以编译hello.c生成可执行文件hello为例,如下图:

Linux下C语言编程基础
  • 预处理:gcc –E hello.c –o hello.i; gcc –E调用cpp
  • 编 译:gcc –S hello.i –o hello.s; gcc –S调用ccl
  • 汇 编:gcc –c hello.s –o hello.o; gcc -c 调用as
  • 链 接:gcc hello.o –o hello ; gcc -o 调用ld

编译过程比较难记,我们简化一下,前三步,GCC的参数连起来是”ESc”,相应输入的文件的后缀是”iso”,这样记忆起来就容易多了。 学习GCC的另外一个重点是:参考教材《深入理解计算机系统》7.6,7.10节,学习静态库,动态库的制作。

4. gdb

建议使用CGDB(sudo apt install cgdb安装),比GDB好用,熟悉VC,CodeBlock等IDE的调试方式的同学,可以使用DDD(sudo apt install ddd 安装)。

注意使用GCC编译时要加”-g”参数。

参考gdb参考卡

GDB最基本的命令有:

  • gdb programm(启动GDB)
  • b 设断点(要会设4种断点:行断点、函数断点、条件断点、临时断点)
  • run 开始运行程序
  • bt 打印函数调用堆栈
  • p 查看变量值
  • c 从当前断点继续运行到下一个断点
  • n 单步运行
  • s 单步运行
  • quit 退出GDB

问题:GDB的n(next)命令让GDB执行下一行,然后暂停。 s(step)命令的作用与此类似,只是在函数调用时step命令会进入函数,那么实际使用中应该优先选用哪个?为什么?

其他几个我认为应该掌握的调试命令有:

  • display 跟踪变量值的改变
  • until 跳出循环
  • finish 跳出函数
  • help 帮助

学习参考:

5. make与makefile

三、练习

  1. 练习vimtutuor至少一遍;
  2. 使用vim 输入以下代码,练习使用”K”查找帮助文档:
    Linux下C语言编程基础
  3. 练习gcc编译运行代码;
  4. 练习gdb调试代码;
  5. 把上述代码中除了main函数外的代码制作成一个静态库math.a和一个共享库math.so;
  6. 编写makefile,让代码编译,上述静态库和共享库的使用自动化

欢迎关注 “rocedu”微信公众号(手机上长按二维码)

做中教,做中学,实践中共同进步!

Linux下C语言编程基础

如果你觉得本文对你有帮助,请点一下左下角的” 好文要顶“和” 收藏该文

Original: https://www.cnblogs.com/rocedu/p/10535440.html
Author: 娄老师
Title: Linux下C语言编程基础

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/10046/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

发表回复

登录后才能评论
免费咨询
免费咨询
扫码关注
扫码关注
联系站长

站长Johngo!

大数据和算法重度研究者!

持续产出大数据、算法、LeetCode干货,以及业界好资源!

2022012703491714

微信来撩,免费咨询:xiaozhu_tec

分享本页
返回顶部