一、在Linux下的C语言编程所需工具(下面所列举的都是我编程所用的工具)

1.文本编辑器

  • Vim

2.编译链接工具

  • gcc

3.调试器

  • gdb

4.项目管理工具

  • make和makefile

二、VIM文本编辑器的模式和配置

vim有三种模式,分别是命令行模式插入模式,还有底行模式

  1. 命令行模式(用户可以通过命令来对编辑内容进行编辑,如:复制yy、删除或者剪贴dd、粘贴p)
  2. 插入模式(i或者a进入,I为到当行首进入Insert模式,A为到行尾进入Insert模式)
  3. 底行模式(用来保存退出编辑、进行查找关键字或者修改当前vim的配置)

具体的按键属性有兴趣的读者可以点击下方链接:

https://www.runoob.com/linux/linux-vim.html

要用好vim这个强大的工具,必不可少的一步就是修改它的配置文件.vimrc,并且在此基础上安装合适的插件。

注意:   (1)vim在系统的配置文件在:/etc/vim/vimrc  (如果修改所有用户都会受到影响)

(2)vim在用户中的配置文件在:~/.vimrc        (如果修改了只对当前用户造成影响)

要想了解如何配置vim的可以点击下方链接:

https://vimjc.com/vimrc-config.html

三、GCC编译器套件

用gcc编译C语言的好处是可以了解到C语言源代码到可执行程序的每一个过程(这样你对C语言的了解就不仅仅在表面上)

linux下源代码生成可执行文件的过程

这里用main.c的源文件来举例子:

1.预处理阶段(cpp): gcc -E main.c -o main.i

这一阶段做的事情是删除注释,替换由#define定义的宏命令,根据条件编译对程序进行裁剪,并加载#include所包含的头文件

2.编译阶段(gcc): gcc -S main.i -o main.s

这一阶段做的事情是对C语言的语句进行语法的检查,并将C文件转变为汇编文件(汇编语言:AT&T语法)

3.汇编阶段(as): gcc -c main.s -o main.o

这一阶段做的事情是将汇编文件转变为二进制文件

4.链接阶段(ld): gcc main.o -o main

这一阶段做的事情是将二进制的目标文件和系统的函数库的代码组合在一起生成可执行文件(main)

四、Gdb神奇的调试器

对可执行程序进行调试,可以理解的程序每一个执行过程,观察变量值的变化状况,显示行数,设置断点。

具体细节可以参考以下链接:

https://blog.csdn.net/zdy0_2004/article/details/80102076

五、Make与Makefile的完美配合

首先要配置好Makefile这一个文件,这里要遵循一定的语法规则。

配置完之后就可以用make进行一键编译。

具体细节可以参考以下链接:

https://blog.csdn.net/liqiang981/article/details/75093286?ops_request_misc=&request_id=&biz_id=102&utm_term=make&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-5-75093286.pc_search_result_before_js&spm=1018.2226.3001.4187

因为这是本人编写的第一个博客,如果存在什么不当之处,请各位指出。(感谢大家!!!)

Linux下的C语言编程的更多相关文章

  1. linux下的c语言编程学习笔记

    视频参看csdn学院王阳和下面的linux环境下c语言编程基础相当的经典,其中王阳的视频讲的很好,相当的经典 编译hellogcc.c需要依赖/home目录下的头文件 为了避免同一个文件被includ ...

  2. 在Linux下开始C语言的学习

    为什么要在linux下学习C语言? linux下可以体验到最纯粹的C语言编程,可以抛出其他IDE的影响 环境配置简单,一条命令就足够.甚至对于大多数linux发行版本,都已经不需要配置C语言的环境 查 ...

  3. linux下的C语言开发 进程创建 延伸的几个例子

    在Linux下面,创建进程是一件十分有意思的事情.我们都知道,进程是操作系统下面享有资源的基本单位.那么,在linux下面应该怎么创建进程呢?其实非常简单,一个fork函数就可以搞定了.但是,我们需要 ...

  4. Linux下的C Socket编程 -- server端的继续研究

    Linux下的C Socket编程(四) 延长server的生命周期 在前面的一个个例子中,server在处理完一个连接后便会立即结束掉自己,然而这种server并不科学啊,server应该是能够一直 ...

  5. Linux下的C Socket编程 -- server端的简单示例

    Linux下的C Socket编程(三) server端的简单示例 经过前面的client端的学习,我们已经知道了如何创建socket,所以接下来就是去绑定他到具体的一个端口上面去. 绑定socket ...

  6. Linux下的C Socket编程 -- 获取对方IP地址

    Linux下的C Socket编程(二) 获取域名对应的IP地址 经过上面的讨论,如果我们想要连接到远程的服务器,我们需要知道对方的IP地址,系统函数gethostbyname便能够实现这个目的.它能 ...

  7. Linux下的C Socket编程 -- 简介与client端的处理

    Linux下的C Socket编程(一) 介绍 Socket是进程间通信的方式之一,是进程间的通信.这里说的进程并不一定是在同一台机器上也有可能是通过网络连接的不同机器上.只要他们之间建立起了sock ...

  8. Linux 下 expect 脚本语言中交互处理常用命令

    Linux 下 expect 脚本语言中交互处理常用命令 1. #!/usr/bin/expect 告诉操作系统脚本里的代码使用那一个 shell 来执行.这里的 expect 其实和 Linux 下 ...

  9. Linux下高并发网络编程

      Linux下高并发网络编程 1.修改用户进程可打开文件数限制 在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时, 最高的并发数量都要受到系统对用户单一进程同时可打 ...

随机推荐

  1. Java中,那些关于String和字符串常量池你不得不知道的东西

    老套的笔试题 在一些老套的笔试题中,会要你判断s1==s2为false还是true,s1.equals(s2)为false还是true. String s1 = new String("xy ...

  2. ././include/linux/kconfig.h:4:32: fatal error: generated/autoconf.h: No such file or directory 解决办法

    我在编写内核驱动模块的时候报了一个非常奇怪的错误,如下图: 在目录下看了一下确实没有发现这个文件,感觉很奇怪,因为我记得之前编译模块是没有错误的,所以不可能是我代码写的有问题. 查阅了资料很多说要清除 ...

  3. Spring基于注解开发的注解使用之AOP(部分源代码分析)

    AOP底层实现动态代理 1.导入spring-aop包依赖 <!--aopV1--> <dependency> <groupId>org.springframewo ...

  4. Android 8.0/9.0 wifi 自动连接评分机制

    前言 Android N wifi auto connect流程分析 Android N selectQualifiedNetwork分析 Wifi自动连接时的评分机制 今天了解了一下Wifi自动连接 ...

  5. Redis 实战 —— 09. 实现任务队列、消息拉取和文件分发

    任务队列 P133 通过将待执行任务的相关信息放入队列里面,并在之后对队列进行处理,可以推迟执行那些耗时对操作,这种将工作交给任务处理器来执行对做法被称为任务队列 (task queue) . P13 ...

  6. https://nginx.org/en/docs/http/request_processing.html

    https://nginx.org/en/docs/http/request_processing.html

  7. exkmp(Z函数) 笔记

    exkmp 用于求解这样的问题: 求文本串 \(T\) 的每一个后缀与模式串 \(M\) 的匹配长度(即最长公共前缀长度).特别的,取 \(M=T\),得到的这个长度被称为 \(Z\) 函数.&quo ...

  8. Spring Boot 系列总结

    Spring Boot 系列总结 1.SpringBoot自动装配 1.1 Spring装配方式 1.2 Spring @Enable 模块驱动 1.3 Spring 条件装配 2.自动装配正文 2. ...

  9. C++基本之 运算符重载

    =====>友元运算符#include <iostream> using namespace std; class Test { public: Test(int a = 0) { ...

  10. C链表-C语言入门经典例题

    struct student { long num; float score; struct student *next; }; 注意:只是定义了一个struct student类型,并未实际分配存储 ...