Linux上的C/C++编程

Linux上的C/C++编程

  • yum软件包管理器
  • Linux编辑器-vim
    • vim命令模式指令集
    • vim末行模式指令集
  • gcc/g++的使用
  • Linux自动化编译工具-make/Makefile
  • Linux调试器-gdb
    • 调试命令
  • 多人合作工具git

yum软件包管理器

yum 是Linux上常用的包管理器,类似于Windows上的“应用商店”。
语法:

yum install [选项] 软件名    下载安装软件包
yum remove [选项] 软件名     删除已安装软件  
yum list | grep XXX     查询软件(XXX 是软件名上的字符或串)

Linux编辑器-vim

vim是用于代码编写的多模式编辑器,目前主要掌握三种模式:

  • 命令模式(Normal mode)

控制屏幕光标的移动,字符或行的删除,复制移动某代码段以及进入Insert mode,或者到 last line mode下

  • 插入模式(Insert mode)

只有在Insert mode下才可以做文字输入,进行代码编写。
在命令模式下,命令 i (a/o)进入该模式,按「ESC」键可回到命令模式。

  • 末行模式(Last line mode)

文件保存或退出,进行文件替换,找字符串,列出行号等操作。
在命令模式下, shift+; 即可进入该模式,按「ESC」键可回到命令模式。
要查看你的所有模式:打开vim,底行模式直接输入
  

:help vim-modes

vim命令模式指令集

  • 插入模式

· 按「i」切换进入插入模式「 insert mode」, 按“i”进入插入模式后是从光标当前位置开始输入文件;
· 按「a」进入插入模式后, 是从目前光标所在位置的下一个位置开始输入文字;
·按「o」进入插入模式后, 是插入新的一行, 从行首开始输入文字。

  • 从插入模式切换为命令模式

· 按「ESC」键。

  • 移动光标

· vim可以直接用键盘上的光标来上下左右移动, 但正规的 vim是用小写英文字母「h」、「j」、「k」、「I」, 分别控制光标左、下、上、右移一格
· 按 [ gg] : 定位到文本最开始行
· 按 [ shift+g] : 定位到文本末行
· 按 [ n+shift+g] : 定位到文本第n行
· 按「^」: 移动到光标所在行的“行首”
· 按「$ 」: 移动到光标所在行的“行尾”
· 按「w」: 光标跳到下个字的开头
· 按「e」: 光标跳到下个字的字尾
· 按「 ctrl」+「f/b」: 屏幕往“前”移动一页
· 按「 ctrl」+「d/u」: 屏幕往“前/后”移动半页

(“字” 代表的是 两个空格间的一个单词 或 一个汉字)

  • 删除文字

「x」:每按一次, 删除光标所在位置的一个字符
「#x」: 例如,[6×⌋表示删除光标所在位置的“后面 (包含自己在内)”6个字符
「X」:大写的X,每按一次,删除光标所在位置的“前面”一个字符
「#X」:例如,「20X」表示删除光标所在位置的“前面”20个字符
「 dd」:删除光标所在行
「# dd」:从光标所在行开始删除#行

  • 复制

「 yw」:将光标所在之处到字尾的字符复制到缓冲区中。
「# yw」: 复制#个字到缓冲区
「 yy」: 复制光标所在行到缓冲区。
「# yy」:例如,「6yy」表示拷贝从光标所在的该行“往下数”6行文字。
「p」:将缓冲区内的字符贴到光标所在位置。
注意: 所有与“y”有关的复制命令都必须与“p”配合才能完成复制与粘贴功能。

  • 替换

「r」:替换光标所在处的字符。
「R」:进入替换模式,可以自由对内容进行替换(ESC退出)。

  • 撤销上一次操作

「u」:如果您误执行一个命令,可以马上按下「u」, 回到上一个操作。按多次“u”可以执行多次回复。
[ctrl+r⌋:撤销的恢复

vim末行模式指令集

在使用末行模式之前, 请记住先按「ESC」键确定已经处于正常模式, 再按「:」冒号即可进入末行模式。

  • 列出行号

「 set nu」:输入「 set nu」后,会在文件中的每一行前面列出行号。

  • 跳到文件中的某一行

「#」:「#」号表示一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字15,再回车,就会跳到文本的第15行。

  • 查找字符

「/关键字」:从光标所在位置向前搜索文本;先按「/」键,再输入想寻找的字符,如果第一次找的关键字不是想要的,可以一直按「n」会往后寻找,直到找到要的关键字为止。
「?关键字」:用法同上,从光标所在位置向后搜索文本。

  • 保存文件及退出vim

「w」:在冒号输入字母「w」就可以将文件保存起来
「q」:按「q」就是退出, 如果无法离开 vim, 可以在「q」后跟一个「!」强制离开 vim。
「 wq」:一般建议离开时,搭配「w」一起使用,这样在退出的时候还可以保存文件。

  • 多文件编辑
    「vs」:打开多文件编辑窗口。
    「ctrl+ww」:窗口光标切换。

gcc/g++的使用

语法: gcc [选项] 要编译的文件〔选项〕[目标文件]

选项:

  • -static 此选项对生成的文件采用静态链接。
  • -g 生成调试信息,生成debug版本的可执行程序。

实例:

gcc code.c -o mycode    //两种写法都可以,-o 后面一定接形成的目标文件
gcc -o mycode code.c    //将源代码编译成可执行程序,完成了所有处理,得到可执行程序。

预处理(进行宏替换)

  • 预处理功能主要包括宏定义,文件包含,条件编译,去注释等。
  • 预处理指令是以#号开头的代码行。
  • 选项“-E”,该选项的作用是让 gcc在预处理结束后 停止编译过程。
  • 选项“-o”是指目标文件,“. i”文件为已经过预处理的C原始程序。
gcc -E code.c -o mycode.i     //-E后面要接源代码
gcc -E hello. c -o hello.i   //完成预处理就停下来

编译 (生成汇编)

  • 在这个阶段中, gcc首先要检查代码的规范性、是否有语法错误等,以确定代码实际要做的工作,在检查无误后, gcc把代码翻译成汇编语言。
  • 用户可以使用“-S”选项来进行查看,该选项只进行编译而不进行汇编,生成汇编代码。
gcc  -S  mycode.i  -o  mycode.s   
// 从开始到完成编译就停下来(可以从 .c文件开始,也可以从 .i文件开始,其他阶段类似)

汇编 (生成机器可识别代码)

  • 汇编阶段是把编译阶段生成的“. s”文件转成目标文件
gcc  -c  mycode.s  -o  mycode.o   // 从开始到完成汇编就停下来

链接 (生成可执行文件或库文件)

  • 在成功编译之后,就进入了链接阶段,链接函数库。
gcc  mycode.o  -o  mycode   //从开始到完成链接,也就是完成所有处理 

函数库一般分为动态库和静态库两种:

  • 静态库:静态库是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也就不再需要库文件了。其后缀名一般为“ .a”。

  • 动态库:动态库与之相反,在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统的开销。动态库一般后缀名为“ .so’'。

  • gcc默认生成的二进制程序,是动态链接的,这点可以通过 file 命令验证,ldd 可执行程序 -> 查看该可执行程序链接的动态库。

Linux自动化编译工具-make/Makefile

make 是一条指令,makefile 是一个文件,二者配合使用;在makefile中使用 依赖关系搭配依赖方法 来实现编译清除等操作的自动化处理。

make 自顶向下执行,会自动推导makefile中的依赖关系,类似于栈式结构,缺少依赖文件就不断向下找,找到了返回回去的时候执行依赖关系,没找到报错。make默认执行第一目标文件和依赖方法,后面的就要 make目标文件。

make          //默认执行第一个依赖关系和依赖方法
make clean    //指定执行clean

makefile内的书写格式:
编译文件:

目标文件:所依赖的文件
(前面是Tab,不是连续空格)依赖方法  (让所依赖文件转化为目标文件的指令操作)

清理已生成的执行程序:

clean:
依赖方法
(clean: 无依赖关系)

make会根据源文件和目标文件的新旧来判读是否需要重新执行依赖关系进行编译,如果文件没有修改过可能无法使用make来重新编译覆盖原有文件,即:没有更改无法连续使用make。

常用关键字和指代符号:

 .PHONY:伪目标     //作用:使总是可以被执行 .PHONY:clean     //一般不建议把目标文件设置成伪目标,大多是把clean设置成伪目标$@:指代目标文件         $^:所依赖文件
(依赖关系:左边的内容)  (依赖关系:右边的内容)

在依赖方法最前面 加上一个@,就可以让make时不显示具体指令内容
在这里插入图片描述

Linux调试器-gdb

程序的发布方式有两种, debug模式和 release模式:
Linux gcc/g++出来的二进制程序, 默认是 release模式;
要使用 gdb调试,必须在源代码生成二进制程序的时候,加上 -g选项生成debug模式。

调试命令

gdb 文件名(debug模式)  //进入gdb调试模式CTRL + d  或  quit    //退出gdb
  • list/I 行号:显示源代码,接着上次的位置继续往下显示,每次列10行。(list/l 函数名:列出某个函数的源代码)
  • run/r:运行程序。
  • c:从当前位置开始连续而非单步执行程序。(从一个断点运行到下一个断点)
  • next/n:逐过程调试。
  • step/s:逐语句调试。
  • break/b 行号:在某一行设置断点。(b 函数名: 在某个函数开头设置断点)
  • info b: 查看断点信息。
  • d + 断点序号:删除断点。
  • disable + 断点序号:禁用断点但不删除。
  • enanble + 断电序号:启用断点。
  • info breakpoints:参看当前设置了哪些断点。
  • until + 行号:跳转至指定行,如果跳到空行会自动换到下一行。
  • finish:运行进入函数内使用,直接运行完该函数并返回到调用行。
  • p 变量/地址:查看变量的内容或地址,p var_name,p &var_name。
  • display:用法与p相同,但是设置为常显示,每次停下都显示指定变量的值。
  • undisplay + 常显示变量的序号: 取消对先前设置的那些变量的跟踪。
  • bt:查看各级函数调用及参数,展现函数的调用链。
  • set var:修改变量的值
  • info(i) locals: 查看当前栈帧局部变量的值

多人合作工具git

git clone [link]   
//创建一个放代码的目录,[link]就是在Github/Gitee里面创建好的仓库链接

git三板斧:
git add: 将代码放到刚才创建好的目录中

git add 文件名

git commit: 提交改动到本地仓库

git commit .   // . 表示当前目录
//提交的时候应注明提交日志,描述改动的详细内容,不能乱写。

git push: 同步到远端服务器上

git push
//需要填入用户密码,同步成功后,刷新Gitee页面就可以看到代码改动了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1548113.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

深度伪造语音检测(Deepfake Speech Detection, DSD)全面概述

近期,深度学习技术和神经网络在生成型人工智能领域已取得重大突破。如今,关键的通信媒介,如音频、图像、视频和文本,均能实现自动生成,并广泛应用于诸多领域,包括聊天机器人系统(如ChatGPT&…

漏洞挖掘 | 发现隐藏子域的虚拟主机

高效虚拟主机发现的工具和技术 在进行外部渗透测试或漏洞赏金狩猎时,我们从各个角度探索目标系统,收集尽可能多的信息来识别潜在的攻击向量。这涉及识别所有可用的资产、域和子域。 在这个过程中,我们关注的事情之一就是枚举虚拟主机。通过…

阿里云服务器挖矿木马清除

这里写自定义目录标题 阿里云服务器挖矿木马清除清除步骤: 阿里云服务器挖矿木马清除 直接看图: 清除步骤: 是的,根据您提供的 systemctl 输出,c3pool_miner.service 看起来非常可疑,因为它的描述是 “…

VLM系列文章7-Molmo and PixMo

近期涌入了大量的MLLM模型,包括Llama-3.2-11B-Vision-Instruct、Qwen2-VL、mPLUG-Owl3、Ovis1.6-Gemma2-9B、InternVL2、MiniCPM-V 2.6 等工作。笔者看来,多模态模型可能不仅仅在刷榜上,可能更多的需要解决实际任务。因此,更能衡量…

倾斜传感器倾斜仪的工作原理

倾斜仪是一种用来测量物体倾斜角度的仪器,广泛应用于工程、建筑、地质等领域。以下是关于倾斜仪工作原理的文章: 倾斜仪工作原理详解 倾斜仪是一种高精度的测量仪器,用于检测和记录物体或结构的倾斜角度。它在许多领域,如建筑工程…

SpringBoot养老院管理系统—计算机毕业设计源码36270

摘 要 随着我国老年人口数量的逐年增加,人口抚养比也在迅速攀升,越来越多的老年人将走出家门进入养老院安度自己的晚年。同时国家和地方也相继出台了加快发展老龄事业的政策方针,作为机构养老主要组成部分的养老院将迅猛发展。在养老院规模扩…

这样做快速除甲醛入住新家 科学分解甲醛的产品哪个好

这样做快速除甲醛入住新家 科学分解甲醛的产品哪个好 在新房装修的喜悦之余,业主们不得不面对一个常见却又棘手的问题——甲醛污染。甲醛,这种无形的敌人,以其难以察觉的存在,对家人和孩子的健康造成潜在威胁。很多业主们在装修期…

OJ在线评测系统 原生Java代码沙箱程序漏洞讲解 原生超时资源权限控制

核心流程实现四 原生实现Java程序漏洞讲解 我们的程序并不安全 到目前为止 核心流程已经实现 但是想要上线 安全么 首先如果用户提交恶意代码怎么办 执行阻塞 占用资源不释放 程序卡死 注意类名要改为Main 包名一定要去掉 如果这种代码放到服务器中 会无限占用时间 pac…

在GPU计算型实例中安装Tesla驱动超详细过程

摘要:在深度学习、AI等通用计算业务场景或者OpenGL、Direct3D、云游戏等图形加速场景下,安装了Tesla驱动的GPU才可以发挥高性能计算能力,或提供更流畅的图形显示效果。如果您在创建GPU计算型实例(Linux)时未同时安装Te…

[深度学习]循环神经网络

1 自然语言处理概述 语料:一个样本,句子/文章语料库:由语料组成词表:分词之后的词语去重保存成为词表 2 词嵌入层 import jieba import torch.nn as nn import torch # 文本数据 text北京东奥的进度条已经过半,不少外…

错误解决 ---- Unexpected lexical declaration in case block no-case-declarations

1. 报错提示 154:15 error Unexpected lexical declaration in case block no-case-declarations154:21 error resId is assigned a value but never used no-unused-vars158:15 error Unexpected lexical declaration in case block no-case-declarations158:21 e…

Java 使用 Graham 扫描的凸包(Convex Hull using Graham Scan)

先决条件: 如何检查两个给定的线段是否相交? c https://blog.csdn.net/hefeng_aspnet/article/details/141713655 java https://blog.csdn.net/hefeng_aspnet/article/details/141713762 python https://blog.csdn.net/hefeng_aspnet/article/details/…

C语言进阶【6】---结构体【1】(结构体的本质你不想了解吗?)

本章概述 结构体类型的声明结构体变量的创建和初始化结构体成员访问操作符彩蛋时刻!!! 结构体类型的声明 咱们在讲操作符那个章节中,对于结构体类型的声明进行了讲解,咱们先来回忆一下,为后面的讲解作准备…

mac怎么设置ip地址映射

最近开发的项目分为了两种版本,一个自己用的,一个是卖出去的。 卖出的域名是和自己的不一样的,系统中有一些功能是只有卖出去的版本有的,但我们开发完之后还得测试,那就需要给自己的电脑配置一个IP地址映射了&#xf…

【机器学习(九)】分类和回归任务-多层感知机(Multilayer Perceptron,MLP)算法-Sentosa_DSML社区版

文章目录 一、算法概念二、算法原理(一)感知机(二)多层感知机1、隐藏层2、激活函数sigma函数tanh函数ReLU函数 3、反向传播算法 三、算法优缺点(一)优点(二)缺点 四、MLP分类任务实现…

JAVA毕业设计183—基于Java+Springboot+vue的旅游小程序系统(源代码+数据库)

毕设所有选题: https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootvue的旅游小程序系统(源代码数据库)183 一、系统介绍 本项目前后端不分离,分为用户、管理员两种角色 1、用户: 注册、登录、公告信息(…

解读: 火山引擎自研vSwitch技术

最近看到一篇文章介绍火山云的网络vSwitch技术,虽然是2022年的比较老的介绍,但是对于我们看到vSwitch技术的发展还是有些参考的。下面就截取了当时火山vSwitch关心的几个问题,做了一下梳理。 背景 在云计算发展过程中,虚拟网络的…

虚拟环境默认安装到C盘的修改办法

问题: 创建的虚拟环境默认安装到了C盘。 将路径改成D盘下。 解决办法: 我是按照博客w11下载anaconda在d盘,新建的虚拟环境总是在c盘怎么解决_如何保证anaconda的全在e盘-CSDN博客 中的方法1解决的。 用记事本打开.condarc文档&#xff0…

C++之STL—函数对象谓词

函数对象(仿函数) 函数对象(仿函数)是一个**类**,不是一个函数 类名() 仿函数 直接调用: 、 谓词 定义:返回类型为bool 类型的仿函数 一元谓词:operator()接受一个参数 二元谓词&a…

JavaScript高级——事件循环模型

1、 2、所有代码分类 ① 初始化执行代码(同步代码):包含绑定 dom 事件监听,设置定时器,发送 ajax 请求的代码 ② 回调执行代码(异步代码):处理回调逻辑 3、js 引擎执行代码的基本流…