Linux下的C语言编程
一、在Linux下的C语言编程所需工具(下面所列举的都是我编程所用的工具)
1.文本编辑器
- Vim
2.编译链接工具
- gcc
3.调试器
- gdb
4.项目管理工具
- make和makefile
二、VIM文本编辑器的模式和配置
vim有三种模式,分别是命令行模式,插入模式,还有底行模式
- 命令行模式(用户可以通过命令来对编辑内容进行编辑,如:复制yy、删除或者剪贴dd、粘贴p)
- 插入模式(i或者a进入,I为到当行首进入Insert模式,A为到行尾进入Insert模式)
- 底行模式(用来保存退出编辑、进行查找关键字或者修改当前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语言编程的更多相关文章
- linux下的c语言编程学习笔记
视频参看csdn学院王阳和下面的linux环境下c语言编程基础相当的经典,其中王阳的视频讲的很好,相当的经典 编译hellogcc.c需要依赖/home目录下的头文件 为了避免同一个文件被includ ...
- 在Linux下开始C语言的学习
为什么要在linux下学习C语言? linux下可以体验到最纯粹的C语言编程,可以抛出其他IDE的影响 环境配置简单,一条命令就足够.甚至对于大多数linux发行版本,都已经不需要配置C语言的环境 查 ...
- linux下的C语言开发 进程创建 延伸的几个例子
在Linux下面,创建进程是一件十分有意思的事情.我们都知道,进程是操作系统下面享有资源的基本单位.那么,在linux下面应该怎么创建进程呢?其实非常简单,一个fork函数就可以搞定了.但是,我们需要 ...
- Linux下的C Socket编程 -- server端的继续研究
Linux下的C Socket编程(四) 延长server的生命周期 在前面的一个个例子中,server在处理完一个连接后便会立即结束掉自己,然而这种server并不科学啊,server应该是能够一直 ...
- Linux下的C Socket编程 -- server端的简单示例
Linux下的C Socket编程(三) server端的简单示例 经过前面的client端的学习,我们已经知道了如何创建socket,所以接下来就是去绑定他到具体的一个端口上面去. 绑定socket ...
- Linux下的C Socket编程 -- 获取对方IP地址
Linux下的C Socket编程(二) 获取域名对应的IP地址 经过上面的讨论,如果我们想要连接到远程的服务器,我们需要知道对方的IP地址,系统函数gethostbyname便能够实现这个目的.它能 ...
- Linux下的C Socket编程 -- 简介与client端的处理
Linux下的C Socket编程(一) 介绍 Socket是进程间通信的方式之一,是进程间的通信.这里说的进程并不一定是在同一台机器上也有可能是通过网络连接的不同机器上.只要他们之间建立起了sock ...
- Linux 下 expect 脚本语言中交互处理常用命令
Linux 下 expect 脚本语言中交互处理常用命令 1. #!/usr/bin/expect 告诉操作系统脚本里的代码使用那一个 shell 来执行.这里的 expect 其实和 Linux 下 ...
- Linux下高并发网络编程
Linux下高并发网络编程 1.修改用户进程可打开文件数限制 在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时, 最高的并发数量都要受到系统对用户单一进程同时可打 ...
随机推荐
- linux中进制转换
方式一:使用$[]或$(()) 格式为:$[base#number]或$((base#number)),其中base为进制,number为对应进制数. 这种方式输入2进制.16进制等,但只能输出为10 ...
- ALV中的fieldcat详解
字段目录是用来控制ALV显示的网格中每个字段的属性的,比如字段的顺序,对齐方式,可编辑状态,颜色,等等.常用的字段如下: Row_pos: 默认值为0,可选值为1.2.3,既最大分3级别显示 c ...
- STM32F207时钟系统解析
在前几天的文章<晶振原理解析>中介绍了晶振如何产生时钟的,板子使用的是25M无源晶振,下文将介绍STM32F207的时钟系统如何将25M晶振时钟转换为120M系统主频时钟的. 01.时钟系 ...
- Apache Unomi 远程代码执行漏洞复现(CVE-2020-13942)
一.漏洞描述 Apache Unomi 是一个基于标准的客户数据平台(CDP,Customer Data Platform),用于管理在线客户和访客等信息,以提供符合访客隐私规则的个性化体验.在Apa ...
- 使用pushplus+python实现亚马逊到货消息推送微信
xbox series和ps5发售以来,国内黄牛价格一直居高不下.虽然海外amazon上ps5补货很少而且基本撑不过一分钟,但是xbox series系列明显要好抢很多. 日亚.德亚的xbox ser ...
- 浅谈自动化构建之grunt
自动化构建 开发行业的自动化构建 一句话把源代码转化为生产代码,作用是脱离运行环境兼容带来的问题开发阶段使用提高效率的语法,规范 和标准,构建转换那些不被支持的特性转化成能够执行的代码. 一.简单的自 ...
- 抛弃 .NET 经典错误:object null reference , 使用安全扩展方法? 希望对大家有帮助---Bitter.Frame 引用类型的安全转换
还是一样,我不喜欢长篇大论,除非关乎我设计思想领域的文章.大家过来看,都是想节省时间,能用白话表达的内容,绝不长篇大论.能直接上核心代码的,绝不上混淆代码. 长期从事 .NET 工作的人都知道..NE ...
- Error Code: 2006 - MySQL 5.7 server has gone away
使用 Navicat 执行 sql 脚本失败 出现 Error Code: 2006 - MySQL server has gone away 原因 当MySQL客户端或mysqld服务器收到大于ma ...
- 你可能会问,为什么不直接进入 CLOSED 状态,而要停留在 TIME_WAIT 这个状态?
你可能会问,为什么不直接进入 CLOSED 状态,而要停留在 TIME_WAIT 这个状态? 划重点,2MSL 的时间是从主机 1 接收到 FIN 后发送 ACK 开始计时的:如果在 TIME_WAI ...
- bcprov-jdk15on包用于创建CSR(证书请求)
<!-- Eureka注册中心客户端依赖 --> <dependency> <groupId>org.springframework.cloud</group ...